diff options
85 files changed, 568 insertions, 403 deletions
diff --git a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt index 4b641c7bf1c2..09089a6d69ed 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt +++ b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt | |||
@@ -32,8 +32,8 @@ Example: | |||
32 | touchscreen-fuzz-x = <4>; | 32 | touchscreen-fuzz-x = <4>; |
33 | touchscreen-fuzz-y = <7>; | 33 | touchscreen-fuzz-y = <7>; |
34 | touchscreen-fuzz-pressure = <2>; | 34 | touchscreen-fuzz-pressure = <2>; |
35 | touchscreen-max-x = <4096>; | 35 | touchscreen-size-x = <4096>; |
36 | touchscreen-max-y = <4096>; | 36 | touchscreen-size-y = <4096>; |
37 | touchscreen-max-pressure = <2048>; | 37 | touchscreen-max-pressure = <2048>; |
38 | 38 | ||
39 | ti,x-plate-ohms = <280>; | 39 | ti,x-plate-ohms = <280>; |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 61ab1628a057..6726139bd289 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1481,6 +1481,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
1481 | By default, super page will be supported if Intel IOMMU | 1481 | By default, super page will be supported if Intel IOMMU |
1482 | has the capability. With this option, super page will | 1482 | has the capability. With this option, super page will |
1483 | not be supported. | 1483 | not be supported. |
1484 | ecs_off [Default Off] | ||
1485 | By default, extended context tables will be supported if | ||
1486 | the hardware advertises that it has support both for the | ||
1487 | extended tables themselves, and also PASID support. With | ||
1488 | this option set, extended tables will not be used even | ||
1489 | on hardware which claims to support them. | ||
1484 | 1490 | ||
1485 | intel_idle.max_cstate= [KNL,HW,ACPI,X86] | 1491 | intel_idle.max_cstate= [KNL,HW,ACPI,X86] |
1486 | 0 disables intel_idle and fall back on acpi_idle. | 1492 | 0 disables intel_idle and fall back on acpi_idle. |
diff --git a/Documentation/networking/udplite.txt b/Documentation/networking/udplite.txt index d727a3829100..53a726855e49 100644 --- a/Documentation/networking/udplite.txt +++ b/Documentation/networking/udplite.txt | |||
@@ -20,7 +20,7 @@ | |||
20 | files/UDP-Lite-HOWTO.txt | 20 | files/UDP-Lite-HOWTO.txt |
21 | 21 | ||
22 | o The Wireshark UDP-Lite WiKi (with capture files): | 22 | o The Wireshark UDP-Lite WiKi (with capture files): |
23 | http://wiki.wireshark.org/Lightweight_User_Datagram_Protocol | 23 | https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol |
24 | 24 | ||
25 | o The Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt | 25 | o The Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt |
26 | 26 | ||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi index c3255e0c90aa..dbb3f4d2bf84 100644 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi | |||
@@ -223,6 +223,25 @@ | |||
223 | /include/ "tps65217.dtsi" | 223 | /include/ "tps65217.dtsi" |
224 | 224 | ||
225 | &tps { | 225 | &tps { |
226 | /* | ||
227 | * Configure pmic to enter OFF-state instead of SLEEP-state ("RTC-only | ||
228 | * mode") at poweroff. Most BeagleBone versions do not support RTC-only | ||
229 | * mode and risk hardware damage if this mode is entered. | ||
230 | * | ||
231 | * For details, see linux-omap mailing list May 2015 thread | ||
232 | * [PATCH] ARM: dts: am335x-bone* enable pmic-shutdown-controller | ||
233 | * In particular, messages: | ||
234 | * http://www.spinics.net/lists/linux-omap/msg118585.html | ||
235 | * http://www.spinics.net/lists/linux-omap/msg118615.html | ||
236 | * | ||
237 | * You can override this later with | ||
238 | * &tps { /delete-property/ ti,pmic-shutdown-controller; } | ||
239 | * if you want to use RTC-only mode and made sure you are not affected | ||
240 | * by the hardware problems. (Tip: double-check by performing a current | ||
241 | * measurement after shutdown: it should be less than 1 mA.) | ||
242 | */ | ||
243 | ti,pmic-shutdown-controller; | ||
244 | |||
226 | regulators { | 245 | regulators { |
227 | dcdc1_reg: regulator@0 { | 246 | dcdc1_reg: regulator@0 { |
228 | regulator-name = "vdds_dpr"; | 247 | regulator-name = "vdds_dpr"; |
diff --git a/arch/arm/boot/dts/am35xx-clocks.dtsi b/arch/arm/boot/dts/am35xx-clocks.dtsi index 518b8fde88b0..18cc826e9db5 100644 --- a/arch/arm/boot/dts/am35xx-clocks.dtsi +++ b/arch/arm/boot/dts/am35xx-clocks.dtsi | |||
@@ -12,7 +12,7 @@ | |||
12 | #clock-cells = <0>; | 12 | #clock-cells = <0>; |
13 | compatible = "ti,am35xx-gate-clock"; | 13 | compatible = "ti,am35xx-gate-clock"; |
14 | clocks = <&ipss_ick>; | 14 | clocks = <&ipss_ick>; |
15 | reg = <0x059c>; | 15 | reg = <0x032c>; |
16 | ti,bit-shift = <1>; | 16 | ti,bit-shift = <1>; |
17 | }; | 17 | }; |
18 | 18 | ||
@@ -20,7 +20,7 @@ | |||
20 | #clock-cells = <0>; | 20 | #clock-cells = <0>; |
21 | compatible = "ti,gate-clock"; | 21 | compatible = "ti,gate-clock"; |
22 | clocks = <&rmii_ck>; | 22 | clocks = <&rmii_ck>; |
23 | reg = <0x059c>; | 23 | reg = <0x032c>; |
24 | ti,bit-shift = <9>; | 24 | ti,bit-shift = <9>; |
25 | }; | 25 | }; |
26 | 26 | ||
@@ -28,7 +28,7 @@ | |||
28 | #clock-cells = <0>; | 28 | #clock-cells = <0>; |
29 | compatible = "ti,am35xx-gate-clock"; | 29 | compatible = "ti,am35xx-gate-clock"; |
30 | clocks = <&ipss_ick>; | 30 | clocks = <&ipss_ick>; |
31 | reg = <0x059c>; | 31 | reg = <0x032c>; |
32 | ti,bit-shift = <2>; | 32 | ti,bit-shift = <2>; |
33 | }; | 33 | }; |
34 | 34 | ||
@@ -36,7 +36,7 @@ | |||
36 | #clock-cells = <0>; | 36 | #clock-cells = <0>; |
37 | compatible = "ti,gate-clock"; | 37 | compatible = "ti,gate-clock"; |
38 | clocks = <&pclk_ck>; | 38 | clocks = <&pclk_ck>; |
39 | reg = <0x059c>; | 39 | reg = <0x032c>; |
40 | ti,bit-shift = <10>; | 40 | ti,bit-shift = <10>; |
41 | }; | 41 | }; |
42 | 42 | ||
@@ -44,7 +44,7 @@ | |||
44 | #clock-cells = <0>; | 44 | #clock-cells = <0>; |
45 | compatible = "ti,am35xx-gate-clock"; | 45 | compatible = "ti,am35xx-gate-clock"; |
46 | clocks = <&ipss_ick>; | 46 | clocks = <&ipss_ick>; |
47 | reg = <0x059c>; | 47 | reg = <0x032c>; |
48 | ti,bit-shift = <0>; | 48 | ti,bit-shift = <0>; |
49 | }; | 49 | }; |
50 | 50 | ||
@@ -52,7 +52,7 @@ | |||
52 | #clock-cells = <0>; | 52 | #clock-cells = <0>; |
53 | compatible = "ti,gate-clock"; | 53 | compatible = "ti,gate-clock"; |
54 | clocks = <&sys_ck>; | 54 | clocks = <&sys_ck>; |
55 | reg = <0x059c>; | 55 | reg = <0x032c>; |
56 | ti,bit-shift = <8>; | 56 | ti,bit-shift = <8>; |
57 | }; | 57 | }; |
58 | 58 | ||
@@ -60,7 +60,7 @@ | |||
60 | #clock-cells = <0>; | 60 | #clock-cells = <0>; |
61 | compatible = "ti,am35xx-gate-clock"; | 61 | compatible = "ti,am35xx-gate-clock"; |
62 | clocks = <&sys_ck>; | 62 | clocks = <&sys_ck>; |
63 | reg = <0x059c>; | 63 | reg = <0x032c>; |
64 | ti,bit-shift = <3>; | 64 | ti,bit-shift = <3>; |
65 | }; | 65 | }; |
66 | }; | 66 | }; |
diff --git a/arch/arm/boot/dts/armada-xp-linksys-mamba.dts b/arch/arm/boot/dts/armada-xp-linksys-mamba.dts index a2cf2154dcdb..fdd187c55aa5 100644 --- a/arch/arm/boot/dts/armada-xp-linksys-mamba.dts +++ b/arch/arm/boot/dts/armada-xp-linksys-mamba.dts | |||
@@ -95,6 +95,11 @@ | |||
95 | 95 | ||
96 | internal-regs { | 96 | internal-regs { |
97 | 97 | ||
98 | rtc@10300 { | ||
99 | /* No crystal connected to the internal RTC */ | ||
100 | status = "disabled"; | ||
101 | }; | ||
102 | |||
98 | /* J10: VCC, NC, RX, NC, TX, GND */ | 103 | /* J10: VCC, NC, RX, NC, TX, GND */ |
99 | serial@12000 { | 104 | serial@12000 { |
100 | status = "okay"; | 105 | status = "okay"; |
diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi index de8427be830a..289806adb343 100644 --- a/arch/arm/boot/dts/dm816x.dtsi +++ b/arch/arm/boot/dts/dm816x.dtsi | |||
@@ -382,7 +382,7 @@ | |||
382 | ti,hwmods = "usb_otg_hs"; | 382 | ti,hwmods = "usb_otg_hs"; |
383 | 383 | ||
384 | usb0: usb@47401000 { | 384 | usb0: usb@47401000 { |
385 | compatible = "ti,musb-am33xx"; | 385 | compatible = "ti,musb-dm816"; |
386 | reg = <0x47401400 0x400 | 386 | reg = <0x47401400 0x400 |
387 | 0x47401000 0x200>; | 387 | 0x47401000 0x200>; |
388 | reg-names = "mc", "control"; | 388 | reg-names = "mc", "control"; |
@@ -422,7 +422,7 @@ | |||
422 | }; | 422 | }; |
423 | 423 | ||
424 | usb1: usb@47401800 { | 424 | usb1: usb@47401800 { |
425 | compatible = "ti,musb-am33xx"; | 425 | compatible = "ti,musb-dm816"; |
426 | reg = <0x47401c00 0x400 | 426 | reg = <0x47401c00 0x400 |
427 | 0x47401800 0x200>; | 427 | 0x47401800 0x200>; |
428 | reg-names = "mc", "control"; | 428 | reg-names = "mc", "control"; |
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index 5c16145920ea..5f5e0f3d5b64 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts | |||
@@ -832,8 +832,8 @@ | |||
832 | touchscreen-fuzz-x = <4>; | 832 | touchscreen-fuzz-x = <4>; |
833 | touchscreen-fuzz-y = <7>; | 833 | touchscreen-fuzz-y = <7>; |
834 | touchscreen-fuzz-pressure = <2>; | 834 | touchscreen-fuzz-pressure = <2>; |
835 | touchscreen-max-x = <4096>; | 835 | touchscreen-size-x = <4096>; |
836 | touchscreen-max-y = <4096>; | 836 | touchscreen-size-y = <4096>; |
837 | touchscreen-max-pressure = <2048>; | 837 | touchscreen-max-pressure = <2048>; |
838 | 838 | ||
839 | ti,x-plate-ohms = <280>; | 839 | ti,x-plate-ohms = <280>; |
diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index c0b6dccbf7bd..7d23ce04cad5 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c | |||
@@ -87,8 +87,8 @@ static unsigned int exynos_pmu_spare3; | |||
87 | static u32 exynos_irqwake_intmask = 0xffffffff; | 87 | static u32 exynos_irqwake_intmask = 0xffffffff; |
88 | 88 | ||
89 | static const struct exynos_wkup_irq exynos3250_wkup_irq[] = { | 89 | static const struct exynos_wkup_irq exynos3250_wkup_irq[] = { |
90 | { 105, BIT(1) }, /* RTC alarm */ | 90 | { 73, BIT(1) }, /* RTC alarm */ |
91 | { 106, BIT(2) }, /* RTC tick */ | 91 | { 74, BIT(2) }, /* RTC tick */ |
92 | { /* sentinel */ }, | 92 | { /* sentinel */ }, |
93 | }; | 93 | }; |
94 | 94 | ||
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S index d1dedc8195ed..eafd120b53f1 100644 --- a/arch/arm/mach-omap2/sleep34xx.S +++ b/arch/arm/mach-omap2/sleep34xx.S | |||
@@ -203,23 +203,8 @@ save_context_wfi: | |||
203 | */ | 203 | */ |
204 | ldr r1, kernel_flush | 204 | ldr r1, kernel_flush |
205 | blx r1 | 205 | blx r1 |
206 | /* | ||
207 | * The kernel doesn't interwork: v7_flush_dcache_all in particluar will | ||
208 | * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled. | ||
209 | * This sequence switches back to ARM. Note that .align may insert a | ||
210 | * nop: bx pc needs to be word-aligned in order to work. | ||
211 | */ | ||
212 | THUMB( .thumb ) | ||
213 | THUMB( .align ) | ||
214 | THUMB( bx pc ) | ||
215 | THUMB( nop ) | ||
216 | .arm | ||
217 | |||
218 | b omap3_do_wfi | 206 | b omap3_do_wfi |
219 | 207 | ENDPROC(omap34xx_cpu_suspend) | |
220 | /* | ||
221 | * Local variables | ||
222 | */ | ||
223 | omap3_do_wfi_sram_addr: | 208 | omap3_do_wfi_sram_addr: |
224 | .word omap3_do_wfi_sram | 209 | .word omap3_do_wfi_sram |
225 | kernel_flush: | 210 | kernel_flush: |
@@ -364,10 +349,7 @@ exit_nonoff_modes: | |||
364 | * =================================== | 349 | * =================================== |
365 | */ | 350 | */ |
366 | ldmfd sp!, {r4 - r11, pc} @ restore regs and return | 351 | ldmfd sp!, {r4 - r11, pc} @ restore regs and return |
367 | 352 | ENDPROC(omap3_do_wfi) | |
368 | /* | ||
369 | * Local variables | ||
370 | */ | ||
371 | sdrc_power: | 353 | sdrc_power: |
372 | .word SDRC_POWER_V | 354 | .word SDRC_POWER_V |
373 | cm_idlest1_core: | 355 | cm_idlest1_core: |
diff --git a/arch/arm64/boot/dts/mediatek/mt8173-evb.dts b/arch/arm64/boot/dts/mediatek/mt8173-evb.dts index 43d54017b779..d0ab012fa379 100644 --- a/arch/arm64/boot/dts/mediatek/mt8173-evb.dts +++ b/arch/arm64/boot/dts/mediatek/mt8173-evb.dts | |||
@@ -16,7 +16,8 @@ | |||
16 | #include "mt8173.dtsi" | 16 | #include "mt8173.dtsi" |
17 | 17 | ||
18 | / { | 18 | / { |
19 | model = "mediatek,mt8173-evb"; | 19 | model = "MediaTek MT8173 evaluation board"; |
20 | compatible = "mediatek,mt8173-evb", "mediatek,mt8173"; | ||
20 | 21 | ||
21 | aliases { | 22 | aliases { |
22 | serial0 = &uart0; | 23 | serial0 = &uart0; |
diff --git a/arch/blackfin/include/asm/io.h b/arch/blackfin/include/asm/io.h index 4e8ad0523118..6abebe82d4e9 100644 --- a/arch/blackfin/include/asm/io.h +++ b/arch/blackfin/include/asm/io.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/compiler.h> | 10 | #include <linux/compiler.h> |
11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
12 | #include <asm/byteorder.h> | 12 | #include <asm/byteorder.h> |
13 | #include <asm/def_LPBlackfin.h> | ||
13 | 14 | ||
14 | #define __raw_readb bfin_read8 | 15 | #define __raw_readb bfin_read8 |
15 | #define __raw_readw bfin_read16 | 16 | #define __raw_readw bfin_read16 |
diff --git a/arch/s390/net/bpf_jit.h b/arch/s390/net/bpf_jit.h index ba8593a515ba..de156ba3bd71 100644 --- a/arch/s390/net/bpf_jit.h +++ b/arch/s390/net/bpf_jit.h | |||
@@ -48,7 +48,9 @@ extern u8 sk_load_word[], sk_load_half[], sk_load_byte[]; | |||
48 | * We get 160 bytes stack space from calling function, but only use | 48 | * We get 160 bytes stack space from calling function, but only use |
49 | * 11 * 8 byte (old backchain + r15 - r6) for storing registers. | 49 | * 11 * 8 byte (old backchain + r15 - r6) for storing registers. |
50 | */ | 50 | */ |
51 | #define STK_OFF (MAX_BPF_STACK + 8 + 4 + 4 + (160 - 11 * 8)) | 51 | #define STK_SPACE (MAX_BPF_STACK + 8 + 4 + 4 + 160) |
52 | #define STK_160_UNUSED (160 - 11 * 8) | ||
53 | #define STK_OFF (STK_SPACE - STK_160_UNUSED) | ||
52 | #define STK_OFF_TMP 160 /* Offset of tmp buffer on stack */ | 54 | #define STK_OFF_TMP 160 /* Offset of tmp buffer on stack */ |
53 | #define STK_OFF_HLEN 168 /* Offset of SKB header length on stack */ | 55 | #define STK_OFF_HLEN 168 /* Offset of SKB header length on stack */ |
54 | 56 | ||
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 20c146d1251a..55423d8be580 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c | |||
@@ -384,13 +384,16 @@ static void bpf_jit_prologue(struct bpf_jit *jit) | |||
384 | } | 384 | } |
385 | /* Setup stack and backchain */ | 385 | /* Setup stack and backchain */ |
386 | if (jit->seen & SEEN_STACK) { | 386 | if (jit->seen & SEEN_STACK) { |
387 | /* lgr %bfp,%r15 (BPF frame pointer) */ | 387 | if (jit->seen & SEEN_FUNC) |
388 | EMIT4(0xb9040000, BPF_REG_FP, REG_15); | 388 | /* lgr %w1,%r15 (backchain) */ |
389 | EMIT4(0xb9040000, REG_W1, REG_15); | ||
390 | /* la %bfp,STK_160_UNUSED(%r15) (BPF frame pointer) */ | ||
391 | EMIT4_DISP(0x41000000, BPF_REG_FP, REG_15, STK_160_UNUSED); | ||
389 | /* aghi %r15,-STK_OFF */ | 392 | /* aghi %r15,-STK_OFF */ |
390 | EMIT4_IMM(0xa70b0000, REG_15, -STK_OFF); | 393 | EMIT4_IMM(0xa70b0000, REG_15, -STK_OFF); |
391 | if (jit->seen & SEEN_FUNC) | 394 | if (jit->seen & SEEN_FUNC) |
392 | /* stg %bfp,152(%r15) (backchain) */ | 395 | /* stg %w1,152(%r15) (backchain) */ |
393 | EMIT6_DISP_LH(0xe3000000, 0x0024, BPF_REG_FP, REG_0, | 396 | EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0, |
394 | REG_15, 152); | 397 | REG_15, 152); |
395 | } | 398 | } |
396 | /* | 399 | /* |
diff --git a/arch/score/lib/string.S b/arch/score/lib/string.S index 00b7d3a2fc60..16efa3ad037f 100644 --- a/arch/score/lib/string.S +++ b/arch/score/lib/string.S | |||
@@ -175,10 +175,10 @@ ENTRY(__clear_user) | |||
175 | br r3 | 175 | br r3 |
176 | 176 | ||
177 | .section .fixup, "ax" | 177 | .section .fixup, "ax" |
178 | 99: | ||
178 | br r3 | 179 | br r3 |
179 | .previous | 180 | .previous |
180 | .section __ex_table, "a" | 181 | .section __ex_table, "a" |
181 | .align 2 | 182 | .align 2 |
182 | 99: | ||
183 | .word 0b, 99b | 183 | .word 0b, 99b |
184 | .previous | 184 | .previous |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index dd319e59246b..90b7c501c95b 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c | |||
@@ -839,6 +839,7 @@ static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id | |||
839 | box->phys_id = phys_id; | 839 | box->phys_id = phys_id; |
840 | box->pci_dev = pdev; | 840 | box->pci_dev = pdev; |
841 | box->pmu = pmu; | 841 | box->pmu = pmu; |
842 | uncore_box_init(box); | ||
842 | pci_set_drvdata(pdev, box); | 843 | pci_set_drvdata(pdev, box); |
843 | 844 | ||
844 | raw_spin_lock(&uncore_box_lock); | 845 | raw_spin_lock(&uncore_box_lock); |
@@ -1002,8 +1003,10 @@ static int uncore_cpu_starting(int cpu) | |||
1002 | pmu = &type->pmus[j]; | 1003 | pmu = &type->pmus[j]; |
1003 | box = *per_cpu_ptr(pmu->box, cpu); | 1004 | box = *per_cpu_ptr(pmu->box, cpu); |
1004 | /* called by uncore_cpu_init? */ | 1005 | /* called by uncore_cpu_init? */ |
1005 | if (box && box->phys_id >= 0) | 1006 | if (box && box->phys_id >= 0) { |
1007 | uncore_box_init(box); | ||
1006 | continue; | 1008 | continue; |
1009 | } | ||
1007 | 1010 | ||
1008 | for_each_online_cpu(k) { | 1011 | for_each_online_cpu(k) { |
1009 | exist = *per_cpu_ptr(pmu->box, k); | 1012 | exist = *per_cpu_ptr(pmu->box, k); |
@@ -1019,8 +1022,10 @@ static int uncore_cpu_starting(int cpu) | |||
1019 | } | 1022 | } |
1020 | } | 1023 | } |
1021 | 1024 | ||
1022 | if (box) | 1025 | if (box) { |
1023 | box->phys_id = phys_id; | 1026 | box->phys_id = phys_id; |
1027 | uncore_box_init(box); | ||
1028 | } | ||
1024 | } | 1029 | } |
1025 | } | 1030 | } |
1026 | return 0; | 1031 | return 0; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h index f789ec9a0133..ceac8f5dc018 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h | |||
@@ -258,14 +258,6 @@ static inline int uncore_num_counters(struct intel_uncore_box *box) | |||
258 | return box->pmu->type->num_counters; | 258 | return box->pmu->type->num_counters; |
259 | } | 259 | } |
260 | 260 | ||
261 | static inline void uncore_box_init(struct intel_uncore_box *box) | ||
262 | { | ||
263 | if (!test_and_set_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { | ||
264 | if (box->pmu->type->ops->init_box) | ||
265 | box->pmu->type->ops->init_box(box); | ||
266 | } | ||
267 | } | ||
268 | |||
269 | static inline void uncore_disable_box(struct intel_uncore_box *box) | 261 | static inline void uncore_disable_box(struct intel_uncore_box *box) |
270 | { | 262 | { |
271 | if (box->pmu->type->ops->disable_box) | 263 | if (box->pmu->type->ops->disable_box) |
@@ -274,8 +266,6 @@ static inline void uncore_disable_box(struct intel_uncore_box *box) | |||
274 | 266 | ||
275 | static inline void uncore_enable_box(struct intel_uncore_box *box) | 267 | static inline void uncore_enable_box(struct intel_uncore_box *box) |
276 | { | 268 | { |
277 | uncore_box_init(box); | ||
278 | |||
279 | if (box->pmu->type->ops->enable_box) | 269 | if (box->pmu->type->ops->enable_box) |
280 | box->pmu->type->ops->enable_box(box); | 270 | box->pmu->type->ops->enable_box(box); |
281 | } | 271 | } |
@@ -298,6 +288,14 @@ static inline u64 uncore_read_counter(struct intel_uncore_box *box, | |||
298 | return box->pmu->type->ops->read_counter(box, event); | 288 | return box->pmu->type->ops->read_counter(box, event); |
299 | } | 289 | } |
300 | 290 | ||
291 | static inline void uncore_box_init(struct intel_uncore_box *box) | ||
292 | { | ||
293 | if (!test_and_set_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { | ||
294 | if (box->pmu->type->ops->init_box) | ||
295 | box->pmu->type->ops->init_box(box); | ||
296 | } | ||
297 | } | ||
298 | |||
301 | static inline bool uncore_box_is_fake(struct intel_uncore_box *box) | 299 | static inline bool uncore_box_is_fake(struct intel_uncore_box *box) |
302 | { | 300 | { |
303 | return (box->phys_id < 0); | 301 | return (box->phys_id < 0); |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c index 12d9548457e7..6d6e85dd5849 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | |||
@@ -164,8 +164,8 @@ | |||
164 | ((1ULL << (n)) - 1))) | 164 | ((1ULL << (n)) - 1))) |
165 | 165 | ||
166 | /* Haswell-EP Ubox */ | 166 | /* Haswell-EP Ubox */ |
167 | #define HSWEP_U_MSR_PMON_CTR0 0x705 | 167 | #define HSWEP_U_MSR_PMON_CTR0 0x709 |
168 | #define HSWEP_U_MSR_PMON_CTL0 0x709 | 168 | #define HSWEP_U_MSR_PMON_CTL0 0x705 |
169 | #define HSWEP_U_MSR_PMON_FILTER 0x707 | 169 | #define HSWEP_U_MSR_PMON_FILTER 0x707 |
170 | 170 | ||
171 | #define HSWEP_U_MSR_PMON_UCLK_FIXED_CTL 0x703 | 171 | #define HSWEP_U_MSR_PMON_UCLK_FIXED_CTL 0x703 |
@@ -1914,7 +1914,7 @@ static struct intel_uncore_type hswep_uncore_cbox = { | |||
1914 | .name = "cbox", | 1914 | .name = "cbox", |
1915 | .num_counters = 4, | 1915 | .num_counters = 4, |
1916 | .num_boxes = 18, | 1916 | .num_boxes = 18, |
1917 | .perf_ctr_bits = 44, | 1917 | .perf_ctr_bits = 48, |
1918 | .event_ctl = HSWEP_C0_MSR_PMON_CTL0, | 1918 | .event_ctl = HSWEP_C0_MSR_PMON_CTL0, |
1919 | .perf_ctr = HSWEP_C0_MSR_PMON_CTR0, | 1919 | .perf_ctr = HSWEP_C0_MSR_PMON_CTR0, |
1920 | .event_mask = SNBEP_CBO_MSR_PMON_RAW_EVENT_MASK, | 1920 | .event_mask = SNBEP_CBO_MSR_PMON_RAW_EVENT_MASK, |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 44a7d2515497..b73337634214 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -4215,13 +4215,13 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, | |||
4215 | u64 entry, gentry, *spte; | 4215 | u64 entry, gentry, *spte; |
4216 | int npte; | 4216 | int npte; |
4217 | bool remote_flush, local_flush, zap_page; | 4217 | bool remote_flush, local_flush, zap_page; |
4218 | union kvm_mmu_page_role mask = (union kvm_mmu_page_role) { | 4218 | union kvm_mmu_page_role mask = { }; |
4219 | .cr0_wp = 1, | 4219 | |
4220 | .cr4_pae = 1, | 4220 | mask.cr0_wp = 1; |
4221 | .nxe = 1, | 4221 | mask.cr4_pae = 1; |
4222 | .smep_andnot_wp = 1, | 4222 | mask.nxe = 1; |
4223 | .smap_andnot_wp = 1, | 4223 | mask.smep_andnot_wp = 1; |
4224 | }; | 4224 | mask.smap_andnot_wp = 1; |
4225 | 4225 | ||
4226 | /* | 4226 | /* |
4227 | * If we don't have indirect shadow pages, it means no page is | 4227 | * If we don't have indirect shadow pages, it means no page is |
diff --git a/block/blk-mq.c b/block/blk-mq.c index e68b71b85a7e..594eea04266e 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -1600,6 +1600,7 @@ static int blk_mq_hctx_notify(void *data, unsigned long action, | |||
1600 | return NOTIFY_OK; | 1600 | return NOTIFY_OK; |
1601 | } | 1601 | } |
1602 | 1602 | ||
1603 | /* hctx->ctxs will be freed in queue's release handler */ | ||
1603 | static void blk_mq_exit_hctx(struct request_queue *q, | 1604 | static void blk_mq_exit_hctx(struct request_queue *q, |
1604 | struct blk_mq_tag_set *set, | 1605 | struct blk_mq_tag_set *set, |
1605 | struct blk_mq_hw_ctx *hctx, unsigned int hctx_idx) | 1606 | struct blk_mq_hw_ctx *hctx, unsigned int hctx_idx) |
@@ -1618,7 +1619,6 @@ static void blk_mq_exit_hctx(struct request_queue *q, | |||
1618 | 1619 | ||
1619 | blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); | 1620 | blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); |
1620 | blk_free_flush_queue(hctx->fq); | 1621 | blk_free_flush_queue(hctx->fq); |
1621 | kfree(hctx->ctxs); | ||
1622 | blk_mq_free_bitmap(&hctx->ctx_map); | 1622 | blk_mq_free_bitmap(&hctx->ctx_map); |
1623 | } | 1623 | } |
1624 | 1624 | ||
@@ -1891,8 +1891,12 @@ void blk_mq_release(struct request_queue *q) | |||
1891 | unsigned int i; | 1891 | unsigned int i; |
1892 | 1892 | ||
1893 | /* hctx kobj stays in hctx */ | 1893 | /* hctx kobj stays in hctx */ |
1894 | queue_for_each_hw_ctx(q, hctx, i) | 1894 | queue_for_each_hw_ctx(q, hctx, i) { |
1895 | if (!hctx) | ||
1896 | continue; | ||
1897 | kfree(hctx->ctxs); | ||
1895 | kfree(hctx); | 1898 | kfree(hctx); |
1899 | } | ||
1896 | 1900 | ||
1897 | kfree(q->queue_hw_ctx); | 1901 | kfree(q->queue_hw_ctx); |
1898 | 1902 | ||
diff --git a/block/genhd.c b/block/genhd.c index 666e11b83983..ea982eadaf63 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt) | |||
422 | /* allocate ext devt */ | 422 | /* allocate ext devt */ |
423 | idr_preload(GFP_KERNEL); | 423 | idr_preload(GFP_KERNEL); |
424 | 424 | ||
425 | spin_lock(&ext_devt_lock); | 425 | spin_lock_bh(&ext_devt_lock); |
426 | idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); | 426 | idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); |
427 | spin_unlock(&ext_devt_lock); | 427 | spin_unlock_bh(&ext_devt_lock); |
428 | 428 | ||
429 | idr_preload_end(); | 429 | idr_preload_end(); |
430 | if (idx < 0) | 430 | if (idx < 0) |
@@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt) | |||
449 | return; | 449 | return; |
450 | 450 | ||
451 | if (MAJOR(devt) == BLOCK_EXT_MAJOR) { | 451 | if (MAJOR(devt) == BLOCK_EXT_MAJOR) { |
452 | spin_lock(&ext_devt_lock); | 452 | spin_lock_bh(&ext_devt_lock); |
453 | idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); | 453 | idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); |
454 | spin_unlock(&ext_devt_lock); | 454 | spin_unlock_bh(&ext_devt_lock); |
455 | } | 455 | } |
456 | } | 456 | } |
457 | 457 | ||
@@ -690,13 +690,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno) | |||
690 | } else { | 690 | } else { |
691 | struct hd_struct *part; | 691 | struct hd_struct *part; |
692 | 692 | ||
693 | spin_lock(&ext_devt_lock); | 693 | spin_lock_bh(&ext_devt_lock); |
694 | part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); | 694 | part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); |
695 | if (part && get_disk(part_to_disk(part))) { | 695 | if (part && get_disk(part_to_disk(part))) { |
696 | *partno = part->partno; | 696 | *partno = part->partno; |
697 | disk = part_to_disk(part); | 697 | disk = part_to_disk(part); |
698 | } | 698 | } |
699 | spin_unlock(&ext_devt_lock); | 699 | spin_unlock_bh(&ext_devt_lock); |
700 | } | 700 | } |
701 | 701 | ||
702 | return disk; | 702 | return disk; |
diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c index 23716dd8a7ec..5928d0746a27 100644 --- a/drivers/ata/ahci_mvebu.c +++ b/drivers/ata/ahci_mvebu.c | |||
@@ -45,7 +45,7 @@ static void ahci_mvebu_mbus_config(struct ahci_host_priv *hpriv, | |||
45 | writel((cs->mbus_attr << 8) | | 45 | writel((cs->mbus_attr << 8) | |
46 | (dram->mbus_dram_target_id << 4) | 1, | 46 | (dram->mbus_dram_target_id << 4) | 1, |
47 | hpriv->mmio + AHCI_WINDOW_CTRL(i)); | 47 | hpriv->mmio + AHCI_WINDOW_CTRL(i)); |
48 | writel(cs->base, hpriv->mmio + AHCI_WINDOW_BASE(i)); | 48 | writel(cs->base >> 16, hpriv->mmio + AHCI_WINDOW_BASE(i)); |
49 | writel(((cs->size - 1) & 0xffff0000), | 49 | writel(((cs->size - 1) & 0xffff0000), |
50 | hpriv->mmio + AHCI_WINDOW_SIZE(i)); | 50 | hpriv->mmio + AHCI_WINDOW_SIZE(i)); |
51 | } | 51 | } |
diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c index 80a80548ad0a..27245957eee3 100644 --- a/drivers/ata/pata_octeon_cf.c +++ b/drivers/ata/pata_octeon_cf.c | |||
@@ -1053,7 +1053,7 @@ static struct of_device_id octeon_cf_match[] = { | |||
1053 | }, | 1053 | }, |
1054 | {}, | 1054 | {}, |
1055 | }; | 1055 | }; |
1056 | MODULE_DEVICE_TABLE(of, octeon_i2c_match); | 1056 | MODULE_DEVICE_TABLE(of, octeon_cf_match); |
1057 | 1057 | ||
1058 | static struct platform_driver octeon_cf_driver = { | 1058 | static struct platform_driver octeon_cf_driver = { |
1059 | .probe = octeon_cf_probe, | 1059 | .probe = octeon_cf_probe, |
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig index eb1fed5bd516..3ccef9eba6f9 100644 --- a/drivers/block/Kconfig +++ b/drivers/block/Kconfig | |||
@@ -406,6 +406,7 @@ config BLK_DEV_RAM_DAX | |||
406 | 406 | ||
407 | config BLK_DEV_PMEM | 407 | config BLK_DEV_PMEM |
408 | tristate "Persistent memory block device support" | 408 | tristate "Persistent memory block device support" |
409 | depends on HAS_IOMEM | ||
409 | help | 410 | help |
410 | Saying Y here will allow you to use a contiguous range of reserved | 411 | Saying Y here will allow you to use a contiguous range of reserved |
411 | memory as one or more persistent block devices. | 412 | memory as one or more persistent block devices. |
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 8dcbced0eafd..6e134f4759c0 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c | |||
@@ -805,7 +805,9 @@ static void zram_reset_device(struct zram *zram) | |||
805 | memset(&zram->stats, 0, sizeof(zram->stats)); | 805 | memset(&zram->stats, 0, sizeof(zram->stats)); |
806 | zram->disksize = 0; | 806 | zram->disksize = 0; |
807 | zram->max_comp_streams = 1; | 807 | zram->max_comp_streams = 1; |
808 | |||
808 | set_capacity(zram->disk, 0); | 809 | set_capacity(zram->disk, 0); |
810 | part_stat_set_all(&zram->disk->part0, 0); | ||
809 | 811 | ||
810 | up_write(&zram->init_lock); | 812 | up_write(&zram->init_lock); |
811 | /* I/O operation under all of CPU are done so let's free */ | 813 | /* I/O operation under all of CPU are done so let's free */ |
diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index fb9ec6221730..6f047dcb94c2 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c | |||
@@ -58,7 +58,6 @@ | |||
58 | #include <linux/debugfs.h> | 58 | #include <linux/debugfs.h> |
59 | #include <linux/log2.h> | 59 | #include <linux/log2.h> |
60 | #include <linux/syscore_ops.h> | 60 | #include <linux/syscore_ops.h> |
61 | #include <linux/memblock.h> | ||
62 | 61 | ||
63 | /* | 62 | /* |
64 | * DDR target is the same on all platforms. | 63 | * DDR target is the same on all platforms. |
@@ -70,6 +69,7 @@ | |||
70 | */ | 69 | */ |
71 | #define WIN_CTRL_OFF 0x0000 | 70 | #define WIN_CTRL_OFF 0x0000 |
72 | #define WIN_CTRL_ENABLE BIT(0) | 71 | #define WIN_CTRL_ENABLE BIT(0) |
72 | /* Only on HW I/O coherency capable platforms */ | ||
73 | #define WIN_CTRL_SYNCBARRIER BIT(1) | 73 | #define WIN_CTRL_SYNCBARRIER BIT(1) |
74 | #define WIN_CTRL_TGT_MASK 0xf0 | 74 | #define WIN_CTRL_TGT_MASK 0xf0 |
75 | #define WIN_CTRL_TGT_SHIFT 4 | 75 | #define WIN_CTRL_TGT_SHIFT 4 |
@@ -102,9 +102,7 @@ | |||
102 | 102 | ||
103 | /* Relative to mbusbridge_base */ | 103 | /* Relative to mbusbridge_base */ |
104 | #define MBUS_BRIDGE_CTRL_OFF 0x0 | 104 | #define MBUS_BRIDGE_CTRL_OFF 0x0 |
105 | #define MBUS_BRIDGE_SIZE_MASK 0xffff0000 | ||
106 | #define MBUS_BRIDGE_BASE_OFF 0x4 | 105 | #define MBUS_BRIDGE_BASE_OFF 0x4 |
107 | #define MBUS_BRIDGE_BASE_MASK 0xffff0000 | ||
108 | 106 | ||
109 | /* Maximum number of windows, for all known platforms */ | 107 | /* Maximum number of windows, for all known platforms */ |
110 | #define MBUS_WINS_MAX 20 | 108 | #define MBUS_WINS_MAX 20 |
@@ -323,8 +321,9 @@ static int mvebu_mbus_setup_window(struct mvebu_mbus_state *mbus, | |||
323 | ctrl = ((size - 1) & WIN_CTRL_SIZE_MASK) | | 321 | ctrl = ((size - 1) & WIN_CTRL_SIZE_MASK) | |
324 | (attr << WIN_CTRL_ATTR_SHIFT) | | 322 | (attr << WIN_CTRL_ATTR_SHIFT) | |
325 | (target << WIN_CTRL_TGT_SHIFT) | | 323 | (target << WIN_CTRL_TGT_SHIFT) | |
326 | WIN_CTRL_SYNCBARRIER | | ||
327 | WIN_CTRL_ENABLE; | 324 | WIN_CTRL_ENABLE; |
325 | if (mbus->hw_io_coherency) | ||
326 | ctrl |= WIN_CTRL_SYNCBARRIER; | ||
328 | 327 | ||
329 | writel(base & WIN_BASE_LOW, addr + WIN_BASE_OFF); | 328 | writel(base & WIN_BASE_LOW, addr + WIN_BASE_OFF); |
330 | writel(ctrl, addr + WIN_CTRL_OFF); | 329 | writel(ctrl, addr + WIN_CTRL_OFF); |
@@ -577,106 +576,36 @@ static unsigned int armada_xp_mbus_win_remap_offset(int win) | |||
577 | return MVEBU_MBUS_NO_REMAP; | 576 | return MVEBU_MBUS_NO_REMAP; |
578 | } | 577 | } |
579 | 578 | ||
580 | /* | ||
581 | * Use the memblock information to find the MBus bridge hole in the | ||
582 | * physical address space. | ||
583 | */ | ||
584 | static void __init | ||
585 | mvebu_mbus_find_bridge_hole(uint64_t *start, uint64_t *end) | ||
586 | { | ||
587 | struct memblock_region *r; | ||
588 | uint64_t s = 0; | ||
589 | |||
590 | for_each_memblock(memory, r) { | ||
591 | /* | ||
592 | * This part of the memory is above 4 GB, so we don't | ||
593 | * care for the MBus bridge hole. | ||
594 | */ | ||
595 | if (r->base >= 0x100000000) | ||
596 | continue; | ||
597 | |||
598 | /* | ||
599 | * The MBus bridge hole is at the end of the RAM under | ||
600 | * the 4 GB limit. | ||
601 | */ | ||
602 | if (r->base + r->size > s) | ||
603 | s = r->base + r->size; | ||
604 | } | ||
605 | |||
606 | *start = s; | ||
607 | *end = 0x100000000; | ||
608 | } | ||
609 | |||
610 | static void __init | 579 | static void __init |
611 | mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus) | 580 | mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus) |
612 | { | 581 | { |
613 | int i; | 582 | int i; |
614 | int cs; | 583 | int cs; |
615 | uint64_t mbus_bridge_base, mbus_bridge_end; | ||
616 | 584 | ||
617 | mvebu_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | 585 | mvebu_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; |
618 | 586 | ||
619 | mvebu_mbus_find_bridge_hole(&mbus_bridge_base, &mbus_bridge_end); | ||
620 | |||
621 | for (i = 0, cs = 0; i < 4; i++) { | 587 | for (i = 0, cs = 0; i < 4; i++) { |
622 | u64 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i)); | 588 | u32 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i)); |
623 | u64 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i)); | 589 | u32 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i)); |
624 | u64 end; | ||
625 | struct mbus_dram_window *w; | ||
626 | |||
627 | /* Ignore entries that are not enabled */ | ||
628 | if (!(size & DDR_SIZE_ENABLED)) | ||
629 | continue; | ||
630 | |||
631 | /* | ||
632 | * Ignore entries whose base address is above 2^32, | ||
633 | * since devices cannot DMA to such high addresses | ||
634 | */ | ||
635 | if (base & DDR_BASE_CS_HIGH_MASK) | ||
636 | continue; | ||
637 | |||
638 | base = base & DDR_BASE_CS_LOW_MASK; | ||
639 | size = (size | ~DDR_SIZE_MASK) + 1; | ||
640 | end = base + size; | ||
641 | |||
642 | /* | ||
643 | * Adjust base/size of the current CS to make sure it | ||
644 | * doesn't overlap with the MBus bridge hole. This is | ||
645 | * particularly important for devices that do DMA from | ||
646 | * DRAM to a SRAM mapped in a MBus window, such as the | ||
647 | * CESA cryptographic engine. | ||
648 | */ | ||
649 | 590 | ||
650 | /* | 591 | /* |
651 | * The CS is fully enclosed inside the MBus bridge | 592 | * We only take care of entries for which the chip |
652 | * area, so ignore it. | 593 | * select is enabled, and that don't have high base |
594 | * address bits set (devices can only access the first | ||
595 | * 32 bits of the memory). | ||
653 | */ | 596 | */ |
654 | if (base >= mbus_bridge_base && end <= mbus_bridge_end) | 597 | if ((size & DDR_SIZE_ENABLED) && |
655 | continue; | 598 | !(base & DDR_BASE_CS_HIGH_MASK)) { |
599 | struct mbus_dram_window *w; | ||
656 | 600 | ||
657 | /* | 601 | w = &mvebu_mbus_dram_info.cs[cs++]; |
658 | * Beginning of CS overlaps with end of MBus, raise CS | 602 | w->cs_index = i; |
659 | * base address, and shrink its size. | 603 | w->mbus_attr = 0xf & ~(1 << i); |
660 | */ | 604 | if (mbus->hw_io_coherency) |
661 | if (base >= mbus_bridge_base && end > mbus_bridge_end) { | 605 | w->mbus_attr |= ATTR_HW_COHERENCY; |
662 | size -= mbus_bridge_end - base; | 606 | w->base = base & DDR_BASE_CS_LOW_MASK; |
663 | base = mbus_bridge_end; | 607 | w->size = (size | ~DDR_SIZE_MASK) + 1; |
664 | } | 608 | } |
665 | |||
666 | /* | ||
667 | * End of CS overlaps with beginning of MBus, shrink | ||
668 | * CS size. | ||
669 | */ | ||
670 | if (base < mbus_bridge_base && end > mbus_bridge_base) | ||
671 | size -= end - mbus_bridge_base; | ||
672 | |||
673 | w = &mvebu_mbus_dram_info.cs[cs++]; | ||
674 | w->cs_index = i; | ||
675 | w->mbus_attr = 0xf & ~(1 << i); | ||
676 | if (mbus->hw_io_coherency) | ||
677 | w->mbus_attr |= ATTR_HW_COHERENCY; | ||
678 | w->base = base; | ||
679 | w->size = size; | ||
680 | } | 609 | } |
681 | mvebu_mbus_dram_info.num_cs = cs; | 610 | mvebu_mbus_dram_info.num_cs = cs; |
682 | } | 611 | } |
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c index 56e437e31580..ae628001fd97 100644 --- a/drivers/gpu/drm/i915/intel_i2c.c +++ b/drivers/gpu/drm/i915/intel_i2c.c | |||
@@ -435,7 +435,7 @@ gmbus_xfer(struct i2c_adapter *adapter, | |||
435 | struct intel_gmbus, | 435 | struct intel_gmbus, |
436 | adapter); | 436 | adapter); |
437 | struct drm_i915_private *dev_priv = bus->dev_priv; | 437 | struct drm_i915_private *dev_priv = bus->dev_priv; |
438 | int i, reg_offset; | 438 | int i = 0, inc, try = 0, reg_offset; |
439 | int ret = 0; | 439 | int ret = 0; |
440 | 440 | ||
441 | intel_aux_display_runtime_get(dev_priv); | 441 | intel_aux_display_runtime_get(dev_priv); |
@@ -448,12 +448,14 @@ gmbus_xfer(struct i2c_adapter *adapter, | |||
448 | 448 | ||
449 | reg_offset = dev_priv->gpio_mmio_base; | 449 | reg_offset = dev_priv->gpio_mmio_base; |
450 | 450 | ||
451 | retry: | ||
451 | I915_WRITE(GMBUS0 + reg_offset, bus->reg0); | 452 | I915_WRITE(GMBUS0 + reg_offset, bus->reg0); |
452 | 453 | ||
453 | for (i = 0; i < num; i++) { | 454 | for (; i < num; i += inc) { |
455 | inc = 1; | ||
454 | if (gmbus_is_index_read(msgs, i, num)) { | 456 | if (gmbus_is_index_read(msgs, i, num)) { |
455 | ret = gmbus_xfer_index_read(dev_priv, &msgs[i]); | 457 | ret = gmbus_xfer_index_read(dev_priv, &msgs[i]); |
456 | i += 1; /* set i to the index of the read xfer */ | 458 | inc = 2; /* an index read is two msgs */ |
457 | } else if (msgs[i].flags & I2C_M_RD) { | 459 | } else if (msgs[i].flags & I2C_M_RD) { |
458 | ret = gmbus_xfer_read(dev_priv, &msgs[i], 0); | 460 | ret = gmbus_xfer_read(dev_priv, &msgs[i], 0); |
459 | } else { | 461 | } else { |
@@ -525,6 +527,18 @@ clear_err: | |||
525 | adapter->name, msgs[i].addr, | 527 | adapter->name, msgs[i].addr, |
526 | (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len); | 528 | (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len); |
527 | 529 | ||
530 | /* | ||
531 | * Passive adapters sometimes NAK the first probe. Retry the first | ||
532 | * message once on -ENXIO for GMBUS transfers; the bit banging algorithm | ||
533 | * has retries internally. See also the retry loop in | ||
534 | * drm_do_probe_ddc_edid, which bails out on the first -ENXIO. | ||
535 | */ | ||
536 | if (ret == -ENXIO && i == 0 && try++ == 0) { | ||
537 | DRM_DEBUG_KMS("GMBUS [%s] NAK on first message, retry\n", | ||
538 | adapter->name); | ||
539 | goto retry; | ||
540 | } | ||
541 | |||
528 | goto out; | 542 | goto out; |
529 | 543 | ||
530 | timeout: | 544 | timeout: |
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index e87d2f418de4..987b81f31b0e 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -2550,7 +2550,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) | |||
2550 | 2550 | ||
2551 | DRM_DEBUG_KMS("initialising analog device %d\n", device); | 2551 | DRM_DEBUG_KMS("initialising analog device %d\n", device); |
2552 | 2552 | ||
2553 | intel_sdvo_connector = kzalloc(sizeof(*intel_sdvo_connector), GFP_KERNEL); | 2553 | intel_sdvo_connector = intel_sdvo_connector_alloc(); |
2554 | if (!intel_sdvo_connector) | 2554 | if (!intel_sdvo_connector) |
2555 | return false; | 2555 | return false; |
2556 | 2556 | ||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index e597ffc26563..dac78ad24b31 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
@@ -580,9 +580,6 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, | |||
580 | else | 580 | else |
581 | radeon_crtc->pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; | 581 | radeon_crtc->pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; |
582 | 582 | ||
583 | /* if there is no audio, set MINM_OVER_MAXP */ | ||
584 | if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) | ||
585 | radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; | ||
586 | if (rdev->family < CHIP_RV770) | 583 | if (rdev->family < CHIP_RV770) |
587 | radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; | 584 | radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; |
588 | /* use frac fb div on APUs */ | 585 | /* use frac fb div on APUs */ |
@@ -1798,9 +1795,7 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc) | |||
1798 | if ((crtc->mode.clock == test_crtc->mode.clock) && | 1795 | if ((crtc->mode.clock == test_crtc->mode.clock) && |
1799 | (adjusted_clock == test_adjusted_clock) && | 1796 | (adjusted_clock == test_adjusted_clock) && |
1800 | (radeon_crtc->ss_enabled == test_radeon_crtc->ss_enabled) && | 1797 | (radeon_crtc->ss_enabled == test_radeon_crtc->ss_enabled) && |
1801 | (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID) && | 1798 | (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID)) |
1802 | (drm_detect_monitor_audio(radeon_connector_edid(test_radeon_crtc->connector)) == | ||
1803 | drm_detect_monitor_audio(radeon_connector_edid(radeon_crtc->connector)))) | ||
1804 | return test_radeon_crtc->pll_id; | 1799 | return test_radeon_crtc->pll_id; |
1805 | } | 1800 | } |
1806 | } | 1801 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index b7ca4c514621..a7fdfa4f0857 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -1463,6 +1463,21 @@ int radeon_device_init(struct radeon_device *rdev, | |||
1463 | if (r) | 1463 | if (r) |
1464 | DRM_ERROR("ib ring test failed (%d).\n", r); | 1464 | DRM_ERROR("ib ring test failed (%d).\n", r); |
1465 | 1465 | ||
1466 | /* | ||
1467 | * Turks/Thames GPU will freeze whole laptop if DPM is not restarted | ||
1468 | * after the CP ring have chew one packet at least. Hence here we stop | ||
1469 | * and restart DPM after the radeon_ib_ring_tests(). | ||
1470 | */ | ||
1471 | if (rdev->pm.dpm_enabled && | ||
1472 | (rdev->pm.pm_method == PM_METHOD_DPM) && | ||
1473 | (rdev->family == CHIP_TURKS) && | ||
1474 | (rdev->flags & RADEON_IS_MOBILITY)) { | ||
1475 | mutex_lock(&rdev->pm.mutex); | ||
1476 | radeon_dpm_disable(rdev); | ||
1477 | radeon_dpm_enable(rdev); | ||
1478 | mutex_unlock(&rdev->pm.mutex); | ||
1479 | } | ||
1480 | |||
1466 | if ((radeon_testing & 1)) { | 1481 | if ((radeon_testing & 1)) { |
1467 | if (rdev->accel_working) | 1482 | if (rdev->accel_working) |
1468 | radeon_test_moves(rdev); | 1483 | radeon_test_moves(rdev); |
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index de42fc4a22b8..9c3377ca17b7 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c | |||
@@ -458,14 +458,16 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
458 | /* make sure object fit at this offset */ | 458 | /* make sure object fit at this offset */ |
459 | eoffset = soffset + size; | 459 | eoffset = soffset + size; |
460 | if (soffset >= eoffset) { | 460 | if (soffset >= eoffset) { |
461 | return -EINVAL; | 461 | r = -EINVAL; |
462 | goto error_unreserve; | ||
462 | } | 463 | } |
463 | 464 | ||
464 | last_pfn = eoffset / RADEON_GPU_PAGE_SIZE; | 465 | last_pfn = eoffset / RADEON_GPU_PAGE_SIZE; |
465 | if (last_pfn > rdev->vm_manager.max_pfn) { | 466 | if (last_pfn > rdev->vm_manager.max_pfn) { |
466 | dev_err(rdev->dev, "va above limit (0x%08X > 0x%08X)\n", | 467 | dev_err(rdev->dev, "va above limit (0x%08X > 0x%08X)\n", |
467 | last_pfn, rdev->vm_manager.max_pfn); | 468 | last_pfn, rdev->vm_manager.max_pfn); |
468 | return -EINVAL; | 469 | r = -EINVAL; |
470 | goto error_unreserve; | ||
469 | } | 471 | } |
470 | 472 | ||
471 | } else { | 473 | } else { |
@@ -486,7 +488,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
486 | "(bo %p 0x%010lx 0x%010lx)\n", bo_va->bo, | 488 | "(bo %p 0x%010lx 0x%010lx)\n", bo_va->bo, |
487 | soffset, tmp->bo, tmp->it.start, tmp->it.last); | 489 | soffset, tmp->bo, tmp->it.start, tmp->it.last); |
488 | mutex_unlock(&vm->mutex); | 490 | mutex_unlock(&vm->mutex); |
489 | return -EINVAL; | 491 | r = -EINVAL; |
492 | goto error_unreserve; | ||
490 | } | 493 | } |
491 | } | 494 | } |
492 | 495 | ||
@@ -497,7 +500,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
497 | tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL); | 500 | tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL); |
498 | if (!tmp) { | 501 | if (!tmp) { |
499 | mutex_unlock(&vm->mutex); | 502 | mutex_unlock(&vm->mutex); |
500 | return -ENOMEM; | 503 | r = -ENOMEM; |
504 | goto error_unreserve; | ||
501 | } | 505 | } |
502 | tmp->it.start = bo_va->it.start; | 506 | tmp->it.start = bo_va->it.start; |
503 | tmp->it.last = bo_va->it.last; | 507 | tmp->it.last = bo_va->it.last; |
@@ -555,7 +559,6 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
555 | r = radeon_vm_clear_bo(rdev, pt); | 559 | r = radeon_vm_clear_bo(rdev, pt); |
556 | if (r) { | 560 | if (r) { |
557 | radeon_bo_unref(&pt); | 561 | radeon_bo_unref(&pt); |
558 | radeon_bo_reserve(bo_va->bo, false); | ||
559 | return r; | 562 | return r; |
560 | } | 563 | } |
561 | 564 | ||
@@ -575,6 +578,10 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, | |||
575 | 578 | ||
576 | mutex_unlock(&vm->mutex); | 579 | mutex_unlock(&vm->mutex); |
577 | return 0; | 580 | return 0; |
581 | |||
582 | error_unreserve: | ||
583 | radeon_bo_unreserve(bo_va->bo); | ||
584 | return r; | ||
578 | } | 585 | } |
579 | 586 | ||
580 | /** | 587 | /** |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 630af73e98c4..35c8d0ceabee 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
@@ -151,6 +151,11 @@ static const struct min_max_quirk min_max_pnpid_table[] = { | |||
151 | 1024, 5112, 2024, 4832 | 151 | 1024, 5112, 2024, 4832 |
152 | }, | 152 | }, |
153 | { | 153 | { |
154 | (const char * const []){"LEN2000", NULL}, | ||
155 | {ANY_BOARD_ID, ANY_BOARD_ID}, | ||
156 | 1024, 5113, 2021, 4832 | ||
157 | }, | ||
158 | { | ||
154 | (const char * const []){"LEN2001", NULL}, | 159 | (const char * const []){"LEN2001", NULL}, |
155 | {ANY_BOARD_ID, ANY_BOARD_ID}, | 160 | {ANY_BOARD_ID, ANY_BOARD_ID}, |
156 | 1024, 5022, 2508, 4832 | 161 | 1024, 5022, 2508, 4832 |
@@ -191,7 +196,7 @@ static const char * const topbuttonpad_pnp_ids[] = { | |||
191 | "LEN0045", | 196 | "LEN0045", |
192 | "LEN0047", | 197 | "LEN0047", |
193 | "LEN0049", | 198 | "LEN0049", |
194 | "LEN2000", | 199 | "LEN2000", /* S540 */ |
195 | "LEN2001", /* Edge E431 */ | 200 | "LEN2001", /* Edge E431 */ |
196 | "LEN2002", /* Edge E531 */ | 201 | "LEN2002", /* Edge E531 */ |
197 | "LEN2003", | 202 | "LEN2003", |
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 68d43beccb7e..5ecfaf29933a 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c | |||
@@ -422,6 +422,14 @@ static int dmar_map_gfx = 1; | |||
422 | static int dmar_forcedac; | 422 | static int dmar_forcedac; |
423 | static int intel_iommu_strict; | 423 | static int intel_iommu_strict; |
424 | static int intel_iommu_superpage = 1; | 424 | static int intel_iommu_superpage = 1; |
425 | static int intel_iommu_ecs = 1; | ||
426 | |||
427 | /* We only actually use ECS when PASID support (on the new bit 40) | ||
428 | * is also advertised. Some early implementations — the ones with | ||
429 | * PASID support on bit 28 — have issues even when we *only* use | ||
430 | * extended root/context tables. */ | ||
431 | #define ecs_enabled(iommu) (intel_iommu_ecs && ecap_ecs(iommu->ecap) && \ | ||
432 | ecap_pasid(iommu->ecap)) | ||
425 | 433 | ||
426 | int intel_iommu_gfx_mapped; | 434 | int intel_iommu_gfx_mapped; |
427 | EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped); | 435 | EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped); |
@@ -465,6 +473,10 @@ static int __init intel_iommu_setup(char *str) | |||
465 | printk(KERN_INFO | 473 | printk(KERN_INFO |
466 | "Intel-IOMMU: disable supported super page\n"); | 474 | "Intel-IOMMU: disable supported super page\n"); |
467 | intel_iommu_superpage = 0; | 475 | intel_iommu_superpage = 0; |
476 | } else if (!strncmp(str, "ecs_off", 7)) { | ||
477 | printk(KERN_INFO | ||
478 | "Intel-IOMMU: disable extended context table support\n"); | ||
479 | intel_iommu_ecs = 0; | ||
468 | } | 480 | } |
469 | 481 | ||
470 | str += strcspn(str, ","); | 482 | str += strcspn(str, ","); |
@@ -669,7 +681,7 @@ static inline struct context_entry *iommu_context_addr(struct intel_iommu *iommu | |||
669 | struct context_entry *context; | 681 | struct context_entry *context; |
670 | u64 *entry; | 682 | u64 *entry; |
671 | 683 | ||
672 | if (ecap_ecs(iommu->ecap)) { | 684 | if (ecs_enabled(iommu)) { |
673 | if (devfn >= 0x80) { | 685 | if (devfn >= 0x80) { |
674 | devfn -= 0x80; | 686 | devfn -= 0x80; |
675 | entry = &root->hi; | 687 | entry = &root->hi; |
@@ -696,6 +708,11 @@ static inline struct context_entry *iommu_context_addr(struct intel_iommu *iommu | |||
696 | return &context[devfn]; | 708 | return &context[devfn]; |
697 | } | 709 | } |
698 | 710 | ||
711 | static int iommu_dummy(struct device *dev) | ||
712 | { | ||
713 | return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; | ||
714 | } | ||
715 | |||
699 | static struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn) | 716 | static struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn) |
700 | { | 717 | { |
701 | struct dmar_drhd_unit *drhd = NULL; | 718 | struct dmar_drhd_unit *drhd = NULL; |
@@ -705,6 +722,9 @@ static struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devf | |||
705 | u16 segment = 0; | 722 | u16 segment = 0; |
706 | int i; | 723 | int i; |
707 | 724 | ||
725 | if (iommu_dummy(dev)) | ||
726 | return NULL; | ||
727 | |||
708 | if (dev_is_pci(dev)) { | 728 | if (dev_is_pci(dev)) { |
709 | pdev = to_pci_dev(dev); | 729 | pdev = to_pci_dev(dev); |
710 | segment = pci_domain_nr(pdev->bus); | 730 | segment = pci_domain_nr(pdev->bus); |
@@ -798,7 +818,7 @@ static void free_context_table(struct intel_iommu *iommu) | |||
798 | if (context) | 818 | if (context) |
799 | free_pgtable_page(context); | 819 | free_pgtable_page(context); |
800 | 820 | ||
801 | if (!ecap_ecs(iommu->ecap)) | 821 | if (!ecs_enabled(iommu)) |
802 | continue; | 822 | continue; |
803 | 823 | ||
804 | context = iommu_context_addr(iommu, i, 0x80, 0); | 824 | context = iommu_context_addr(iommu, i, 0x80, 0); |
@@ -1133,7 +1153,7 @@ static void iommu_set_root_entry(struct intel_iommu *iommu) | |||
1133 | unsigned long flag; | 1153 | unsigned long flag; |
1134 | 1154 | ||
1135 | addr = virt_to_phys(iommu->root_entry); | 1155 | addr = virt_to_phys(iommu->root_entry); |
1136 | if (ecap_ecs(iommu->ecap)) | 1156 | if (ecs_enabled(iommu)) |
1137 | addr |= DMA_RTADDR_RTT; | 1157 | addr |= DMA_RTADDR_RTT; |
1138 | 1158 | ||
1139 | raw_spin_lock_irqsave(&iommu->register_lock, flag); | 1159 | raw_spin_lock_irqsave(&iommu->register_lock, flag); |
@@ -2969,11 +2989,6 @@ static inline struct dmar_domain *get_valid_domain_for_dev(struct device *dev) | |||
2969 | return __get_valid_domain_for_dev(dev); | 2989 | return __get_valid_domain_for_dev(dev); |
2970 | } | 2990 | } |
2971 | 2991 | ||
2972 | static int iommu_dummy(struct device *dev) | ||
2973 | { | ||
2974 | return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; | ||
2975 | } | ||
2976 | |||
2977 | /* Check if the dev needs to go through non-identity map and unmap process.*/ | 2992 | /* Check if the dev needs to go through non-identity map and unmap process.*/ |
2978 | static int iommu_no_mapping(struct device *dev) | 2993 | static int iommu_no_mapping(struct device *dev) |
2979 | { | 2994 | { |
diff --git a/drivers/irqchip/irq-sunxi-nmi.c b/drivers/irqchip/irq-sunxi-nmi.c index 4a9ce5b50c5b..6b2b582433bd 100644 --- a/drivers/irqchip/irq-sunxi-nmi.c +++ b/drivers/irqchip/irq-sunxi-nmi.c | |||
@@ -104,7 +104,7 @@ static int sunxi_sc_nmi_set_type(struct irq_data *data, unsigned int flow_type) | |||
104 | irqd_set_trigger_type(data, flow_type); | 104 | irqd_set_trigger_type(data, flow_type); |
105 | irq_setup_alt_chip(data, flow_type); | 105 | irq_setup_alt_chip(data, flow_type); |
106 | 106 | ||
107 | for (i = 0; i <= gc->num_ct; i++, ct++) | 107 | for (i = 0; i < gc->num_ct; i++, ct++) |
108 | if (ct->type & flow_type) | 108 | if (ct->type & flow_type) |
109 | ctrl_off = ct->regs.type; | 109 | ctrl_off = ct->regs.type; |
110 | 110 | ||
diff --git a/drivers/md/md.c b/drivers/md/md.c index 27506302eb7a..4dbed4a67aaf 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3834,7 +3834,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len) | |||
3834 | err = -EBUSY; | 3834 | err = -EBUSY; |
3835 | } | 3835 | } |
3836 | spin_unlock(&mddev->lock); | 3836 | spin_unlock(&mddev->lock); |
3837 | return err; | 3837 | return err ?: len; |
3838 | } | 3838 | } |
3839 | err = mddev_lock(mddev); | 3839 | err = mddev_lock(mddev); |
3840 | if (err) | 3840 | if (err) |
@@ -4217,13 +4217,14 @@ action_store(struct mddev *mddev, const char *page, size_t len) | |||
4217 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | 4217 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); |
4218 | else | 4218 | else |
4219 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | 4219 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); |
4220 | flush_workqueue(md_misc_wq); | 4220 | if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) && |
4221 | if (mddev->sync_thread) { | 4221 | mddev_lock(mddev) == 0) { |
4222 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 4222 | flush_workqueue(md_misc_wq); |
4223 | if (mddev_lock(mddev) == 0) { | 4223 | if (mddev->sync_thread) { |
4224 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | ||
4224 | md_reap_sync_thread(mddev); | 4225 | md_reap_sync_thread(mddev); |
4225 | mddev_unlock(mddev); | ||
4226 | } | 4226 | } |
4227 | mddev_unlock(mddev); | ||
4227 | } | 4228 | } |
4228 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || | 4229 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || |
4229 | test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) | 4230 | test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) |
@@ -8261,6 +8262,7 @@ void md_reap_sync_thread(struct mddev *mddev) | |||
8261 | if (mddev_is_clustered(mddev)) | 8262 | if (mddev_is_clustered(mddev)) |
8262 | md_cluster_ops->metadata_update_finish(mddev); | 8263 | md_cluster_ops->metadata_update_finish(mddev); |
8263 | clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery); | 8264 | clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery); |
8265 | clear_bit(MD_RECOVERY_DONE, &mddev->recovery); | ||
8264 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); | 8266 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); |
8265 | clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); | 8267 | clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); |
8266 | clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); | 8268 | clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e793ab6b3570..f55c3f35b746 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -4156,6 +4156,7 @@ static int raid10_start_reshape(struct mddev *mddev) | |||
4156 | 4156 | ||
4157 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); | 4157 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); |
4158 | clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); | 4158 | clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); |
4159 | clear_bit(MD_RECOVERY_DONE, &mddev->recovery); | ||
4159 | set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); | 4160 | set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); |
4160 | set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); | 4161 | set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); |
4161 | 4162 | ||
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 553d54b87052..b6793d2e051f 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -7354,6 +7354,7 @@ static int raid5_start_reshape(struct mddev *mddev) | |||
7354 | 7354 | ||
7355 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); | 7355 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); |
7356 | clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); | 7356 | clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); |
7357 | clear_bit(MD_RECOVERY_DONE, &mddev->recovery); | ||
7357 | set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); | 7358 | set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); |
7358 | set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); | 7359 | set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); |
7359 | mddev->sync_thread = md_register_thread(md_do_sync, mddev, | 7360 | mddev->sync_thread = md_register_thread(md_do_sync, mddev, |
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index db84ddcfec84..9fd6c69a8bac 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | |||
@@ -423,7 +423,7 @@ static void xgbe_tx_timer(unsigned long data) | |||
423 | if (napi_schedule_prep(napi)) { | 423 | if (napi_schedule_prep(napi)) { |
424 | /* Disable Tx and Rx interrupts */ | 424 | /* Disable Tx and Rx interrupts */ |
425 | if (pdata->per_channel_irq) | 425 | if (pdata->per_channel_irq) |
426 | disable_irq(channel->dma_irq); | 426 | disable_irq_nosync(channel->dma_irq); |
427 | else | 427 | else |
428 | xgbe_disable_rx_tx_ints(pdata); | 428 | xgbe_disable_rx_tx_ints(pdata); |
429 | 429 | ||
diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 77363d680532..a3b1c07ae0af 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c | |||
@@ -2464,6 +2464,7 @@ err_out_powerdown: | |||
2464 | ssb_bus_may_powerdown(sdev->bus); | 2464 | ssb_bus_may_powerdown(sdev->bus); |
2465 | 2465 | ||
2466 | err_out_free_dev: | 2466 | err_out_free_dev: |
2467 | netif_napi_del(&bp->napi); | ||
2467 | free_netdev(dev); | 2468 | free_netdev(dev); |
2468 | 2469 | ||
2469 | out: | 2470 | out: |
@@ -2480,6 +2481,7 @@ static void b44_remove_one(struct ssb_device *sdev) | |||
2480 | b44_unregister_phy_one(bp); | 2481 | b44_unregister_phy_one(bp); |
2481 | ssb_device_disable(sdev, 0); | 2482 | ssb_device_disable(sdev, 0); |
2482 | ssb_bus_may_powerdown(sdev->bus); | 2483 | ssb_bus_may_powerdown(sdev->bus); |
2484 | netif_napi_del(&bp->napi); | ||
2483 | free_netdev(dev); | 2485 | free_netdev(dev); |
2484 | ssb_pcihost_set_power_state(sdev, PCI_D3hot); | 2486 | ssb_pcihost_set_power_state(sdev, PCI_D3hot); |
2485 | ssb_set_drvdata(sdev, NULL); | 2487 | ssb_set_drvdata(sdev, NULL); |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index e7651b3c6c57..420949cc55aa 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c | |||
@@ -299,9 +299,6 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) | |||
299 | phy_name = "external RGMII (no delay)"; | 299 | phy_name = "external RGMII (no delay)"; |
300 | else | 300 | else |
301 | phy_name = "external RGMII (TX delay)"; | 301 | phy_name = "external RGMII (TX delay)"; |
302 | reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); | ||
303 | reg |= RGMII_MODE_EN | id_mode_dis; | ||
304 | bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); | ||
305 | bcmgenet_sys_writel(priv, | 302 | bcmgenet_sys_writel(priv, |
306 | PORT_MODE_EXT_GPHY, SYS_PORT_CTRL); | 303 | PORT_MODE_EXT_GPHY, SYS_PORT_CTRL); |
307 | break; | 304 | break; |
@@ -310,6 +307,15 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) | |||
310 | return -EINVAL; | 307 | return -EINVAL; |
311 | } | 308 | } |
312 | 309 | ||
310 | /* This is an external PHY (xMII), so we need to enable the RGMII | ||
311 | * block for the interface to work | ||
312 | */ | ||
313 | if (priv->ext_phy) { | ||
314 | reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); | ||
315 | reg |= RGMII_MODE_EN | id_mode_dis; | ||
316 | bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); | ||
317 | } | ||
318 | |||
313 | if (init) | 319 | if (init) |
314 | dev_info(kdev, "configuring instance for %s\n", phy_name); | 320 | dev_info(kdev, "configuring instance for %s\n", phy_name); |
315 | 321 | ||
diff --git a/drivers/net/ethernet/cisco/enic/enic_ethtool.c b/drivers/net/ethernet/cisco/enic/enic_ethtool.c index 28d9ca675a27..68d47b196dae 100644 --- a/drivers/net/ethernet/cisco/enic/enic_ethtool.c +++ b/drivers/net/ethernet/cisco/enic/enic_ethtool.c | |||
@@ -131,8 +131,15 @@ static void enic_get_drvinfo(struct net_device *netdev, | |||
131 | { | 131 | { |
132 | struct enic *enic = netdev_priv(netdev); | 132 | struct enic *enic = netdev_priv(netdev); |
133 | struct vnic_devcmd_fw_info *fw_info; | 133 | struct vnic_devcmd_fw_info *fw_info; |
134 | int err; | ||
134 | 135 | ||
135 | enic_dev_fw_info(enic, &fw_info); | 136 | err = enic_dev_fw_info(enic, &fw_info); |
137 | /* return only when pci_zalloc_consistent fails in vnic_dev_fw_info | ||
138 | * For other failures, like devcmd failure, we return previously | ||
139 | * recorded info. | ||
140 | */ | ||
141 | if (err == -ENOMEM) | ||
142 | return; | ||
136 | 143 | ||
137 | strlcpy(drvinfo->driver, DRV_NAME, sizeof(drvinfo->driver)); | 144 | strlcpy(drvinfo->driver, DRV_NAME, sizeof(drvinfo->driver)); |
138 | strlcpy(drvinfo->version, DRV_VERSION, sizeof(drvinfo->version)); | 145 | strlcpy(drvinfo->version, DRV_VERSION, sizeof(drvinfo->version)); |
@@ -181,8 +188,15 @@ static void enic_get_ethtool_stats(struct net_device *netdev, | |||
181 | struct enic *enic = netdev_priv(netdev); | 188 | struct enic *enic = netdev_priv(netdev); |
182 | struct vnic_stats *vstats; | 189 | struct vnic_stats *vstats; |
183 | unsigned int i; | 190 | unsigned int i; |
184 | 191 | int err; | |
185 | enic_dev_stats_dump(enic, &vstats); | 192 | |
193 | err = enic_dev_stats_dump(enic, &vstats); | ||
194 | /* return only when pci_zalloc_consistent fails in vnic_dev_stats_dump | ||
195 | * For other failures, like devcmd failure, we return previously | ||
196 | * recorded stats. | ||
197 | */ | ||
198 | if (err == -ENOMEM) | ||
199 | return; | ||
186 | 200 | ||
187 | for (i = 0; i < enic_n_tx_stats; i++) | 201 | for (i = 0; i < enic_n_tx_stats; i++) |
188 | *(data++) = ((u64 *)&vstats->tx)[enic_tx_stats[i].index]; | 202 | *(data++) = ((u64 *)&vstats->tx)[enic_tx_stats[i].index]; |
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index 204bd182473b..eadae1b412c6 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -615,8 +615,15 @@ static struct rtnl_link_stats64 *enic_get_stats(struct net_device *netdev, | |||
615 | { | 615 | { |
616 | struct enic *enic = netdev_priv(netdev); | 616 | struct enic *enic = netdev_priv(netdev); |
617 | struct vnic_stats *stats; | 617 | struct vnic_stats *stats; |
618 | int err; | ||
618 | 619 | ||
619 | enic_dev_stats_dump(enic, &stats); | 620 | err = enic_dev_stats_dump(enic, &stats); |
621 | /* return only when pci_zalloc_consistent fails in vnic_dev_stats_dump | ||
622 | * For other failures, like devcmd failure, we return previously | ||
623 | * recorded stats. | ||
624 | */ | ||
625 | if (err == -ENOMEM) | ||
626 | return net_stats; | ||
620 | 627 | ||
621 | net_stats->tx_packets = stats->tx.tx_frames_ok; | 628 | net_stats->tx_packets = stats->tx.tx_frames_ok; |
622 | net_stats->tx_bytes = stats->tx.tx_bytes_ok; | 629 | net_stats->tx_bytes = stats->tx.tx_bytes_ok; |
@@ -1407,6 +1414,7 @@ static int enic_poll_msix_rq(struct napi_struct *napi, int budget) | |||
1407 | */ | 1414 | */ |
1408 | enic_calc_int_moderation(enic, &enic->rq[rq]); | 1415 | enic_calc_int_moderation(enic, &enic->rq[rq]); |
1409 | 1416 | ||
1417 | enic_poll_unlock_napi(&enic->rq[rq]); | ||
1410 | if (work_done < work_to_do) { | 1418 | if (work_done < work_to_do) { |
1411 | 1419 | ||
1412 | /* Some work done, but not enough to stay in polling, | 1420 | /* Some work done, but not enough to stay in polling, |
@@ -1418,7 +1426,6 @@ static int enic_poll_msix_rq(struct napi_struct *napi, int budget) | |||
1418 | enic_set_int_moderation(enic, &enic->rq[rq]); | 1426 | enic_set_int_moderation(enic, &enic->rq[rq]); |
1419 | vnic_intr_unmask(&enic->intr[intr]); | 1427 | vnic_intr_unmask(&enic->intr[intr]); |
1420 | } | 1428 | } |
1421 | enic_poll_unlock_napi(&enic->rq[rq]); | ||
1422 | 1429 | ||
1423 | return work_done; | 1430 | return work_done; |
1424 | } | 1431 | } |
diff --git a/drivers/net/ethernet/cisco/enic/vnic_rq.c b/drivers/net/ethernet/cisco/enic/vnic_rq.c index 36a2ed606c91..c4b2183bf352 100644 --- a/drivers/net/ethernet/cisco/enic/vnic_rq.c +++ b/drivers/net/ethernet/cisco/enic/vnic_rq.c | |||
@@ -188,16 +188,15 @@ void vnic_rq_clean(struct vnic_rq *rq, | |||
188 | struct vnic_rq_buf *buf; | 188 | struct vnic_rq_buf *buf; |
189 | u32 fetch_index; | 189 | u32 fetch_index; |
190 | unsigned int count = rq->ring.desc_count; | 190 | unsigned int count = rq->ring.desc_count; |
191 | int i; | ||
191 | 192 | ||
192 | buf = rq->to_clean; | 193 | buf = rq->to_clean; |
193 | 194 | ||
194 | while (vnic_rq_desc_used(rq) > 0) { | 195 | for (i = 0; i < rq->ring.desc_count; i++) { |
195 | |||
196 | (*buf_clean)(rq, buf); | 196 | (*buf_clean)(rq, buf); |
197 | 197 | buf = buf->next; | |
198 | buf = rq->to_clean = buf->next; | ||
199 | rq->ring.desc_avail++; | ||
200 | } | 198 | } |
199 | rq->ring.desc_avail = rq->ring.desc_count - 1; | ||
201 | 200 | ||
202 | /* Use current fetch_index as the ring starting point */ | 201 | /* Use current fetch_index as the ring starting point */ |
203 | fetch_index = ioread32(&rq->ctrl->fetch_index); | 202 | fetch_index = ioread32(&rq->ctrl->fetch_index); |
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index fb140faeafb1..c5e1d0ac75f9 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c | |||
@@ -1720,9 +1720,9 @@ int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf) | |||
1720 | total_size = buf_len; | 1720 | total_size = buf_len; |
1721 | 1721 | ||
1722 | get_fat_cmd.size = sizeof(struct be_cmd_req_get_fat) + 60*1024; | 1722 | get_fat_cmd.size = sizeof(struct be_cmd_req_get_fat) + 60*1024; |
1723 | get_fat_cmd.va = pci_alloc_consistent(adapter->pdev, | 1723 | get_fat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
1724 | get_fat_cmd.size, | 1724 | get_fat_cmd.size, |
1725 | &get_fat_cmd.dma); | 1725 | &get_fat_cmd.dma, GFP_ATOMIC); |
1726 | if (!get_fat_cmd.va) { | 1726 | if (!get_fat_cmd.va) { |
1727 | dev_err(&adapter->pdev->dev, | 1727 | dev_err(&adapter->pdev->dev, |
1728 | "Memory allocation failure while reading FAT data\n"); | 1728 | "Memory allocation failure while reading FAT data\n"); |
@@ -1767,8 +1767,8 @@ int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf) | |||
1767 | log_offset += buf_size; | 1767 | log_offset += buf_size; |
1768 | } | 1768 | } |
1769 | err: | 1769 | err: |
1770 | pci_free_consistent(adapter->pdev, get_fat_cmd.size, | 1770 | dma_free_coherent(&adapter->pdev->dev, get_fat_cmd.size, |
1771 | get_fat_cmd.va, get_fat_cmd.dma); | 1771 | get_fat_cmd.va, get_fat_cmd.dma); |
1772 | spin_unlock_bh(&adapter->mcc_lock); | 1772 | spin_unlock_bh(&adapter->mcc_lock); |
1773 | return status; | 1773 | return status; |
1774 | } | 1774 | } |
@@ -2215,12 +2215,12 @@ int be_cmd_read_port_transceiver_data(struct be_adapter *adapter, | |||
2215 | return -EINVAL; | 2215 | return -EINVAL; |
2216 | 2216 | ||
2217 | cmd.size = sizeof(struct be_cmd_resp_port_type); | 2217 | cmd.size = sizeof(struct be_cmd_resp_port_type); |
2218 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 2218 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
2219 | GFP_ATOMIC); | ||
2219 | if (!cmd.va) { | 2220 | if (!cmd.va) { |
2220 | dev_err(&adapter->pdev->dev, "Memory allocation failed\n"); | 2221 | dev_err(&adapter->pdev->dev, "Memory allocation failed\n"); |
2221 | return -ENOMEM; | 2222 | return -ENOMEM; |
2222 | } | 2223 | } |
2223 | memset(cmd.va, 0, cmd.size); | ||
2224 | 2224 | ||
2225 | spin_lock_bh(&adapter->mcc_lock); | 2225 | spin_lock_bh(&adapter->mcc_lock); |
2226 | 2226 | ||
@@ -2245,7 +2245,7 @@ int be_cmd_read_port_transceiver_data(struct be_adapter *adapter, | |||
2245 | } | 2245 | } |
2246 | err: | 2246 | err: |
2247 | spin_unlock_bh(&adapter->mcc_lock); | 2247 | spin_unlock_bh(&adapter->mcc_lock); |
2248 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 2248 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); |
2249 | return status; | 2249 | return status; |
2250 | } | 2250 | } |
2251 | 2251 | ||
@@ -2720,7 +2720,8 @@ int be_cmd_get_phy_info(struct be_adapter *adapter) | |||
2720 | goto err; | 2720 | goto err; |
2721 | } | 2721 | } |
2722 | cmd.size = sizeof(struct be_cmd_req_get_phy_info); | 2722 | cmd.size = sizeof(struct be_cmd_req_get_phy_info); |
2723 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 2723 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
2724 | GFP_ATOMIC); | ||
2724 | if (!cmd.va) { | 2725 | if (!cmd.va) { |
2725 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); | 2726 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); |
2726 | status = -ENOMEM; | 2727 | status = -ENOMEM; |
@@ -2754,7 +2755,7 @@ int be_cmd_get_phy_info(struct be_adapter *adapter) | |||
2754 | BE_SUPPORTED_SPEED_1GBPS; | 2755 | BE_SUPPORTED_SPEED_1GBPS; |
2755 | } | 2756 | } |
2756 | } | 2757 | } |
2757 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 2758 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); |
2758 | err: | 2759 | err: |
2759 | spin_unlock_bh(&adapter->mcc_lock); | 2760 | spin_unlock_bh(&adapter->mcc_lock); |
2760 | return status; | 2761 | return status; |
@@ -2805,8 +2806,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter) | |||
2805 | 2806 | ||
2806 | memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); | 2807 | memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); |
2807 | attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); | 2808 | attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); |
2808 | attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, | 2809 | attribs_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
2809 | &attribs_cmd.dma); | 2810 | attribs_cmd.size, |
2811 | &attribs_cmd.dma, GFP_ATOMIC); | ||
2810 | if (!attribs_cmd.va) { | 2812 | if (!attribs_cmd.va) { |
2811 | dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); | 2813 | dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); |
2812 | status = -ENOMEM; | 2814 | status = -ENOMEM; |
@@ -2833,8 +2835,8 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter) | |||
2833 | err: | 2835 | err: |
2834 | mutex_unlock(&adapter->mbox_lock); | 2836 | mutex_unlock(&adapter->mbox_lock); |
2835 | if (attribs_cmd.va) | 2837 | if (attribs_cmd.va) |
2836 | pci_free_consistent(adapter->pdev, attribs_cmd.size, | 2838 | dma_free_coherent(&adapter->pdev->dev, attribs_cmd.size, |
2837 | attribs_cmd.va, attribs_cmd.dma); | 2839 | attribs_cmd.va, attribs_cmd.dma); |
2838 | return status; | 2840 | return status; |
2839 | } | 2841 | } |
2840 | 2842 | ||
@@ -2972,9 +2974,10 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, | |||
2972 | 2974 | ||
2973 | memset(&get_mac_list_cmd, 0, sizeof(struct be_dma_mem)); | 2975 | memset(&get_mac_list_cmd, 0, sizeof(struct be_dma_mem)); |
2974 | get_mac_list_cmd.size = sizeof(struct be_cmd_resp_get_mac_list); | 2976 | get_mac_list_cmd.size = sizeof(struct be_cmd_resp_get_mac_list); |
2975 | get_mac_list_cmd.va = pci_alloc_consistent(adapter->pdev, | 2977 | get_mac_list_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
2976 | get_mac_list_cmd.size, | 2978 | get_mac_list_cmd.size, |
2977 | &get_mac_list_cmd.dma); | 2979 | &get_mac_list_cmd.dma, |
2980 | GFP_ATOMIC); | ||
2978 | 2981 | ||
2979 | if (!get_mac_list_cmd.va) { | 2982 | if (!get_mac_list_cmd.va) { |
2980 | dev_err(&adapter->pdev->dev, | 2983 | dev_err(&adapter->pdev->dev, |
@@ -3047,8 +3050,8 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, | |||
3047 | 3050 | ||
3048 | out: | 3051 | out: |
3049 | spin_unlock_bh(&adapter->mcc_lock); | 3052 | spin_unlock_bh(&adapter->mcc_lock); |
3050 | pci_free_consistent(adapter->pdev, get_mac_list_cmd.size, | 3053 | dma_free_coherent(&adapter->pdev->dev, get_mac_list_cmd.size, |
3051 | get_mac_list_cmd.va, get_mac_list_cmd.dma); | 3054 | get_mac_list_cmd.va, get_mac_list_cmd.dma); |
3052 | return status; | 3055 | return status; |
3053 | } | 3056 | } |
3054 | 3057 | ||
@@ -3101,8 +3104,8 @@ int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, | |||
3101 | 3104 | ||
3102 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3105 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3103 | cmd.size = sizeof(struct be_cmd_req_set_mac_list); | 3106 | cmd.size = sizeof(struct be_cmd_req_set_mac_list); |
3104 | cmd.va = dma_alloc_coherent(&adapter->pdev->dev, cmd.size, | 3107 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
3105 | &cmd.dma, GFP_KERNEL); | 3108 | GFP_KERNEL); |
3106 | if (!cmd.va) | 3109 | if (!cmd.va) |
3107 | return -ENOMEM; | 3110 | return -ENOMEM; |
3108 | 3111 | ||
@@ -3291,7 +3294,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) | |||
3291 | 3294 | ||
3292 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3295 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3293 | cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); | 3296 | cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); |
3294 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 3297 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
3298 | GFP_ATOMIC); | ||
3295 | if (!cmd.va) { | 3299 | if (!cmd.va) { |
3296 | dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); | 3300 | dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); |
3297 | status = -ENOMEM; | 3301 | status = -ENOMEM; |
@@ -3326,7 +3330,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) | |||
3326 | err: | 3330 | err: |
3327 | mutex_unlock(&adapter->mbox_lock); | 3331 | mutex_unlock(&adapter->mbox_lock); |
3328 | if (cmd.va) | 3332 | if (cmd.va) |
3329 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 3333 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
3334 | cmd.dma); | ||
3330 | return status; | 3335 | return status; |
3331 | 3336 | ||
3332 | } | 3337 | } |
@@ -3340,8 +3345,9 @@ int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level) | |||
3340 | 3345 | ||
3341 | memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); | 3346 | memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); |
3342 | extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); | 3347 | extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); |
3343 | extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size, | 3348 | extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
3344 | &extfat_cmd.dma); | 3349 | extfat_cmd.size, &extfat_cmd.dma, |
3350 | GFP_ATOMIC); | ||
3345 | if (!extfat_cmd.va) | 3351 | if (!extfat_cmd.va) |
3346 | return -ENOMEM; | 3352 | return -ENOMEM; |
3347 | 3353 | ||
@@ -3363,8 +3369,8 @@ int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level) | |||
3363 | 3369 | ||
3364 | status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs); | 3370 | status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs); |
3365 | err: | 3371 | err: |
3366 | pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va, | 3372 | dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, |
3367 | extfat_cmd.dma); | 3373 | extfat_cmd.dma); |
3368 | return status; | 3374 | return status; |
3369 | } | 3375 | } |
3370 | 3376 | ||
@@ -3377,8 +3383,9 @@ int be_cmd_get_fw_log_level(struct be_adapter *adapter) | |||
3377 | 3383 | ||
3378 | memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); | 3384 | memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); |
3379 | extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); | 3385 | extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); |
3380 | extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size, | 3386 | extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
3381 | &extfat_cmd.dma); | 3387 | extfat_cmd.size, &extfat_cmd.dma, |
3388 | GFP_ATOMIC); | ||
3382 | 3389 | ||
3383 | if (!extfat_cmd.va) { | 3390 | if (!extfat_cmd.va) { |
3384 | dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n", | 3391 | dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n", |
@@ -3396,8 +3403,8 @@ int be_cmd_get_fw_log_level(struct be_adapter *adapter) | |||
3396 | level = cfgs->module[0].trace_lvl[j].dbg_lvl; | 3403 | level = cfgs->module[0].trace_lvl[j].dbg_lvl; |
3397 | } | 3404 | } |
3398 | } | 3405 | } |
3399 | pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va, | 3406 | dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, |
3400 | extfat_cmd.dma); | 3407 | extfat_cmd.dma); |
3401 | err: | 3408 | err: |
3402 | return level; | 3409 | return level; |
3403 | } | 3410 | } |
@@ -3595,7 +3602,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res) | |||
3595 | 3602 | ||
3596 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3603 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3597 | cmd.size = sizeof(struct be_cmd_resp_get_func_config); | 3604 | cmd.size = sizeof(struct be_cmd_resp_get_func_config); |
3598 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 3605 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
3606 | GFP_ATOMIC); | ||
3599 | if (!cmd.va) { | 3607 | if (!cmd.va) { |
3600 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); | 3608 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); |
3601 | status = -ENOMEM; | 3609 | status = -ENOMEM; |
@@ -3635,7 +3643,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res) | |||
3635 | err: | 3643 | err: |
3636 | mutex_unlock(&adapter->mbox_lock); | 3644 | mutex_unlock(&adapter->mbox_lock); |
3637 | if (cmd.va) | 3645 | if (cmd.va) |
3638 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 3646 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
3647 | cmd.dma); | ||
3639 | return status; | 3648 | return status; |
3640 | } | 3649 | } |
3641 | 3650 | ||
@@ -3656,7 +3665,8 @@ int be_cmd_get_profile_config(struct be_adapter *adapter, | |||
3656 | 3665 | ||
3657 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3666 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3658 | cmd.size = sizeof(struct be_cmd_resp_get_profile_config); | 3667 | cmd.size = sizeof(struct be_cmd_resp_get_profile_config); |
3659 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 3668 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
3669 | GFP_ATOMIC); | ||
3660 | if (!cmd.va) | 3670 | if (!cmd.va) |
3661 | return -ENOMEM; | 3671 | return -ENOMEM; |
3662 | 3672 | ||
@@ -3702,7 +3712,8 @@ int be_cmd_get_profile_config(struct be_adapter *adapter, | |||
3702 | res->vf_if_cap_flags = vf_res->cap_flags; | 3712 | res->vf_if_cap_flags = vf_res->cap_flags; |
3703 | err: | 3713 | err: |
3704 | if (cmd.va) | 3714 | if (cmd.va) |
3705 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 3715 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
3716 | cmd.dma); | ||
3706 | return status; | 3717 | return status; |
3707 | } | 3718 | } |
3708 | 3719 | ||
@@ -3717,7 +3728,8 @@ static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc, | |||
3717 | 3728 | ||
3718 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3729 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3719 | cmd.size = sizeof(struct be_cmd_req_set_profile_config); | 3730 | cmd.size = sizeof(struct be_cmd_req_set_profile_config); |
3720 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); | 3731 | cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
3732 | GFP_ATOMIC); | ||
3721 | if (!cmd.va) | 3733 | if (!cmd.va) |
3722 | return -ENOMEM; | 3734 | return -ENOMEM; |
3723 | 3735 | ||
@@ -3733,7 +3745,8 @@ static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc, | |||
3733 | status = be_cmd_notify_wait(adapter, &wrb); | 3745 | status = be_cmd_notify_wait(adapter, &wrb); |
3734 | 3746 | ||
3735 | if (cmd.va) | 3747 | if (cmd.va) |
3736 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 3748 | dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
3749 | cmd.dma); | ||
3737 | return status; | 3750 | return status; |
3738 | } | 3751 | } |
3739 | 3752 | ||
diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c index b765c24625bf..2835dee5dc39 100644 --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c | |||
@@ -264,8 +264,8 @@ static int lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name, | |||
264 | int status = 0; | 264 | int status = 0; |
265 | 265 | ||
266 | read_cmd.size = LANCER_READ_FILE_CHUNK; | 266 | read_cmd.size = LANCER_READ_FILE_CHUNK; |
267 | read_cmd.va = pci_alloc_consistent(adapter->pdev, read_cmd.size, | 267 | read_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, read_cmd.size, |
268 | &read_cmd.dma); | 268 | &read_cmd.dma, GFP_ATOMIC); |
269 | 269 | ||
270 | if (!read_cmd.va) { | 270 | if (!read_cmd.va) { |
271 | dev_err(&adapter->pdev->dev, | 271 | dev_err(&adapter->pdev->dev, |
@@ -289,8 +289,8 @@ static int lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name, | |||
289 | break; | 289 | break; |
290 | } | 290 | } |
291 | } | 291 | } |
292 | pci_free_consistent(adapter->pdev, read_cmd.size, read_cmd.va, | 292 | dma_free_coherent(&adapter->pdev->dev, read_cmd.size, read_cmd.va, |
293 | read_cmd.dma); | 293 | read_cmd.dma); |
294 | 294 | ||
295 | return status; | 295 | return status; |
296 | } | 296 | } |
@@ -818,8 +818,9 @@ static int be_test_ddr_dma(struct be_adapter *adapter) | |||
818 | }; | 818 | }; |
819 | 819 | ||
820 | ddrdma_cmd.size = sizeof(struct be_cmd_req_ddrdma_test); | 820 | ddrdma_cmd.size = sizeof(struct be_cmd_req_ddrdma_test); |
821 | ddrdma_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, ddrdma_cmd.size, | 821 | ddrdma_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
822 | &ddrdma_cmd.dma, GFP_KERNEL); | 822 | ddrdma_cmd.size, &ddrdma_cmd.dma, |
823 | GFP_KERNEL); | ||
823 | if (!ddrdma_cmd.va) | 824 | if (!ddrdma_cmd.va) |
824 | return -ENOMEM; | 825 | return -ENOMEM; |
825 | 826 | ||
@@ -941,8 +942,9 @@ static int be_read_eeprom(struct net_device *netdev, | |||
941 | 942 | ||
942 | memset(&eeprom_cmd, 0, sizeof(struct be_dma_mem)); | 943 | memset(&eeprom_cmd, 0, sizeof(struct be_dma_mem)); |
943 | eeprom_cmd.size = sizeof(struct be_cmd_req_seeprom_read); | 944 | eeprom_cmd.size = sizeof(struct be_cmd_req_seeprom_read); |
944 | eeprom_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, eeprom_cmd.size, | 945 | eeprom_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
945 | &eeprom_cmd.dma, GFP_KERNEL); | 946 | eeprom_cmd.size, &eeprom_cmd.dma, |
947 | GFP_KERNEL); | ||
946 | 948 | ||
947 | if (!eeprom_cmd.va) | 949 | if (!eeprom_cmd.va) |
948 | return -ENOMEM; | 950 | return -ENOMEM; |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 6f9ffb9026cd..e43cc8a73ea7 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -4605,8 +4605,8 @@ static int lancer_fw_download(struct be_adapter *adapter, | |||
4605 | 4605 | ||
4606 | flash_cmd.size = sizeof(struct lancer_cmd_req_write_object) | 4606 | flash_cmd.size = sizeof(struct lancer_cmd_req_write_object) |
4607 | + LANCER_FW_DOWNLOAD_CHUNK; | 4607 | + LANCER_FW_DOWNLOAD_CHUNK; |
4608 | flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size, | 4608 | flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size, |
4609 | &flash_cmd.dma, GFP_KERNEL); | 4609 | &flash_cmd.dma, GFP_KERNEL); |
4610 | if (!flash_cmd.va) | 4610 | if (!flash_cmd.va) |
4611 | return -ENOMEM; | 4611 | return -ENOMEM; |
4612 | 4612 | ||
@@ -4739,8 +4739,8 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw) | |||
4739 | } | 4739 | } |
4740 | 4740 | ||
4741 | flash_cmd.size = sizeof(struct be_cmd_write_flashrom); | 4741 | flash_cmd.size = sizeof(struct be_cmd_write_flashrom); |
4742 | flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size, &flash_cmd.dma, | 4742 | flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size, &flash_cmd.dma, |
4743 | GFP_KERNEL); | 4743 | GFP_KERNEL); |
4744 | if (!flash_cmd.va) | 4744 | if (!flash_cmd.va) |
4745 | return -ENOMEM; | 4745 | return -ENOMEM; |
4746 | 4746 | ||
@@ -5291,16 +5291,15 @@ static int be_drv_init(struct be_adapter *adapter) | |||
5291 | int status = 0; | 5291 | int status = 0; |
5292 | 5292 | ||
5293 | mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16; | 5293 | mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16; |
5294 | mbox_mem_alloc->va = dma_alloc_coherent(dev, mbox_mem_alloc->size, | 5294 | mbox_mem_alloc->va = dma_zalloc_coherent(dev, mbox_mem_alloc->size, |
5295 | &mbox_mem_alloc->dma, | 5295 | &mbox_mem_alloc->dma, |
5296 | GFP_KERNEL); | 5296 | GFP_KERNEL); |
5297 | if (!mbox_mem_alloc->va) | 5297 | if (!mbox_mem_alloc->va) |
5298 | return -ENOMEM; | 5298 | return -ENOMEM; |
5299 | 5299 | ||
5300 | mbox_mem_align->size = sizeof(struct be_mcc_mailbox); | 5300 | mbox_mem_align->size = sizeof(struct be_mcc_mailbox); |
5301 | mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16); | 5301 | mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16); |
5302 | mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16); | 5302 | mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16); |
5303 | memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox)); | ||
5304 | 5303 | ||
5305 | rx_filter->size = sizeof(struct be_cmd_req_rx_filter); | 5304 | rx_filter->size = sizeof(struct be_cmd_req_rx_filter); |
5306 | rx_filter->va = dma_zalloc_coherent(dev, rx_filter->size, | 5305 | rx_filter->va = dma_zalloc_coherent(dev, rx_filter->size, |
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h index 33c35d3b7420..5d47307121ab 100644 --- a/drivers/net/ethernet/intel/i40e/i40e.h +++ b/drivers/net/ethernet/intel/i40e/i40e.h | |||
@@ -317,6 +317,7 @@ struct i40e_pf { | |||
317 | #endif | 317 | #endif |
318 | #define I40E_FLAG_PORT_ID_VALID (u64)(1 << 28) | 318 | #define I40E_FLAG_PORT_ID_VALID (u64)(1 << 28) |
319 | #define I40E_FLAG_DCB_CAPABLE (u64)(1 << 29) | 319 | #define I40E_FLAG_DCB_CAPABLE (u64)(1 << 29) |
320 | #define I40E_FLAG_VEB_MODE_ENABLED BIT_ULL(40) | ||
320 | 321 | ||
321 | /* tracks features that get auto disabled by errors */ | 322 | /* tracks features that get auto disabled by errors */ |
322 | u64 auto_disable_flags; | 323 | u64 auto_disable_flags; |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c index 34170eabca7d..da0faf478af0 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c +++ b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c | |||
@@ -1021,6 +1021,15 @@ static ssize_t i40e_dbg_command_write(struct file *filp, | |||
1021 | goto command_write_done; | 1021 | goto command_write_done; |
1022 | } | 1022 | } |
1023 | 1023 | ||
1024 | /* By default we are in VEPA mode, if this is the first VF/VMDq | ||
1025 | * VSI to be added switch to VEB mode. | ||
1026 | */ | ||
1027 | if (!(pf->flags & I40E_FLAG_VEB_MODE_ENABLED)) { | ||
1028 | pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; | ||
1029 | i40e_do_reset_safe(pf, | ||
1030 | BIT_ULL(__I40E_PF_RESET_REQUESTED)); | ||
1031 | } | ||
1032 | |||
1024 | vsi = i40e_vsi_setup(pf, I40E_VSI_VMDQ2, vsi_seid, 0); | 1033 | vsi = i40e_vsi_setup(pf, I40E_VSI_VMDQ2, vsi_seid, 0); |
1025 | if (vsi) | 1034 | if (vsi) |
1026 | dev_info(&pf->pdev->dev, "added VSI %d to relay %d\n", | 1035 | dev_info(&pf->pdev->dev, "added VSI %d to relay %d\n", |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index a54c14491e3b..5b5bea159bd5 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -6097,6 +6097,10 @@ static int i40e_reconstitute_veb(struct i40e_veb *veb) | |||
6097 | if (ret) | 6097 | if (ret) |
6098 | goto end_reconstitute; | 6098 | goto end_reconstitute; |
6099 | 6099 | ||
6100 | if (pf->flags & I40E_FLAG_VEB_MODE_ENABLED) | ||
6101 | veb->bridge_mode = BRIDGE_MODE_VEB; | ||
6102 | else | ||
6103 | veb->bridge_mode = BRIDGE_MODE_VEPA; | ||
6100 | i40e_config_bridge_mode(veb); | 6104 | i40e_config_bridge_mode(veb); |
6101 | 6105 | ||
6102 | /* create the remaining VSIs attached to this VEB */ | 6106 | /* create the remaining VSIs attached to this VEB */ |
@@ -8031,7 +8035,12 @@ static int i40e_ndo_bridge_setlink(struct net_device *dev, | |||
8031 | } else if (mode != veb->bridge_mode) { | 8035 | } else if (mode != veb->bridge_mode) { |
8032 | /* Existing HW bridge but different mode needs reset */ | 8036 | /* Existing HW bridge but different mode needs reset */ |
8033 | veb->bridge_mode = mode; | 8037 | veb->bridge_mode = mode; |
8034 | i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED)); | 8038 | /* TODO: If no VFs or VMDq VSIs, disallow VEB mode */ |
8039 | if (mode == BRIDGE_MODE_VEB) | ||
8040 | pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; | ||
8041 | else | ||
8042 | pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED; | ||
8043 | i40e_do_reset(pf, BIT_ULL(__I40E_PF_RESET_REQUESTED)); | ||
8035 | break; | 8044 | break; |
8036 | } | 8045 | } |
8037 | } | 8046 | } |
@@ -8343,11 +8352,12 @@ static int i40e_add_vsi(struct i40e_vsi *vsi) | |||
8343 | ctxt.uplink_seid = vsi->uplink_seid; | 8352 | ctxt.uplink_seid = vsi->uplink_seid; |
8344 | ctxt.connection_type = I40E_AQ_VSI_CONN_TYPE_NORMAL; | 8353 | ctxt.connection_type = I40E_AQ_VSI_CONN_TYPE_NORMAL; |
8345 | ctxt.flags = I40E_AQ_VSI_TYPE_PF; | 8354 | ctxt.flags = I40E_AQ_VSI_TYPE_PF; |
8346 | if (i40e_is_vsi_uplink_mode_veb(vsi)) { | 8355 | if ((pf->flags & I40E_FLAG_VEB_MODE_ENABLED) && |
8356 | (i40e_is_vsi_uplink_mode_veb(vsi))) { | ||
8347 | ctxt.info.valid_sections |= | 8357 | ctxt.info.valid_sections |= |
8348 | cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID); | 8358 | cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID); |
8349 | ctxt.info.switch_id = | 8359 | ctxt.info.switch_id = |
8350 | cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB); | 8360 | cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB); |
8351 | } | 8361 | } |
8352 | i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true); | 8362 | i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true); |
8353 | break; | 8363 | break; |
@@ -8746,6 +8756,14 @@ struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type, | |||
8746 | __func__); | 8756 | __func__); |
8747 | return NULL; | 8757 | return NULL; |
8748 | } | 8758 | } |
8759 | /* We come up by default in VEPA mode if SRIOV is not | ||
8760 | * already enabled, in which case we can't force VEPA | ||
8761 | * mode. | ||
8762 | */ | ||
8763 | if (!(pf->flags & I40E_FLAG_VEB_MODE_ENABLED)) { | ||
8764 | veb->bridge_mode = BRIDGE_MODE_VEPA; | ||
8765 | pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED; | ||
8766 | } | ||
8749 | i40e_config_bridge_mode(veb); | 8767 | i40e_config_bridge_mode(veb); |
8750 | } | 8768 | } |
8751 | for (i = 0; i < I40E_MAX_VEB && !veb; i++) { | 8769 | for (i = 0; i < I40E_MAX_VEB && !veb; i++) { |
@@ -9856,6 +9874,15 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
9856 | goto err_switch_setup; | 9874 | goto err_switch_setup; |
9857 | } | 9875 | } |
9858 | 9876 | ||
9877 | #ifdef CONFIG_PCI_IOV | ||
9878 | /* prep for VF support */ | ||
9879 | if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) && | ||
9880 | (pf->flags & I40E_FLAG_MSIX_ENABLED) && | ||
9881 | !test_bit(__I40E_BAD_EEPROM, &pf->state)) { | ||
9882 | if (pci_num_vf(pdev)) | ||
9883 | pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; | ||
9884 | } | ||
9885 | #endif | ||
9859 | err = i40e_setup_pf_switch(pf, false); | 9886 | err = i40e_setup_pf_switch(pf, false); |
9860 | if (err) { | 9887 | if (err) { |
9861 | dev_info(&pdev->dev, "setup_pf_switch failed: %d\n", err); | 9888 | dev_info(&pdev->dev, "setup_pf_switch failed: %d\n", err); |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c index 4bd3a80aba82..9d95042d5a0f 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c | |||
@@ -2410,14 +2410,12 @@ static int i40e_maybe_stop_tx(struct i40e_ring *tx_ring, int size) | |||
2410 | * i40e_chk_linearize - Check if there are more than 8 fragments per packet | 2410 | * i40e_chk_linearize - Check if there are more than 8 fragments per packet |
2411 | * @skb: send buffer | 2411 | * @skb: send buffer |
2412 | * @tx_flags: collected send information | 2412 | * @tx_flags: collected send information |
2413 | * @hdr_len: size of the packet header | ||
2414 | * | 2413 | * |
2415 | * Note: Our HW can't scatter-gather more than 8 fragments to build | 2414 | * Note: Our HW can't scatter-gather more than 8 fragments to build |
2416 | * a packet on the wire and so we need to figure out the cases where we | 2415 | * a packet on the wire and so we need to figure out the cases where we |
2417 | * need to linearize the skb. | 2416 | * need to linearize the skb. |
2418 | **/ | 2417 | **/ |
2419 | static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | 2418 | static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags) |
2420 | const u8 hdr_len) | ||
2421 | { | 2419 | { |
2422 | struct skb_frag_struct *frag; | 2420 | struct skb_frag_struct *frag; |
2423 | bool linearize = false; | 2421 | bool linearize = false; |
@@ -2429,7 +2427,7 @@ static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | |||
2429 | gso_segs = skb_shinfo(skb)->gso_segs; | 2427 | gso_segs = skb_shinfo(skb)->gso_segs; |
2430 | 2428 | ||
2431 | if (tx_flags & (I40E_TX_FLAGS_TSO | I40E_TX_FLAGS_FSO)) { | 2429 | if (tx_flags & (I40E_TX_FLAGS_TSO | I40E_TX_FLAGS_FSO)) { |
2432 | u16 j = 1; | 2430 | u16 j = 0; |
2433 | 2431 | ||
2434 | if (num_frags < (I40E_MAX_BUFFER_TXD)) | 2432 | if (num_frags < (I40E_MAX_BUFFER_TXD)) |
2435 | goto linearize_chk_done; | 2433 | goto linearize_chk_done; |
@@ -2440,21 +2438,18 @@ static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | |||
2440 | goto linearize_chk_done; | 2438 | goto linearize_chk_done; |
2441 | } | 2439 | } |
2442 | frag = &skb_shinfo(skb)->frags[0]; | 2440 | frag = &skb_shinfo(skb)->frags[0]; |
2443 | size = hdr_len; | ||
2444 | /* we might still have more fragments per segment */ | 2441 | /* we might still have more fragments per segment */ |
2445 | do { | 2442 | do { |
2446 | size += skb_frag_size(frag); | 2443 | size += skb_frag_size(frag); |
2447 | frag++; j++; | 2444 | frag++; j++; |
2445 | if ((size >= skb_shinfo(skb)->gso_size) && | ||
2446 | (j < I40E_MAX_BUFFER_TXD)) { | ||
2447 | size = (size % skb_shinfo(skb)->gso_size); | ||
2448 | j = (size) ? 1 : 0; | ||
2449 | } | ||
2448 | if (j == I40E_MAX_BUFFER_TXD) { | 2450 | if (j == I40E_MAX_BUFFER_TXD) { |
2449 | if (size < skb_shinfo(skb)->gso_size) { | 2451 | linearize = true; |
2450 | linearize = true; | 2452 | break; |
2451 | break; | ||
2452 | } | ||
2453 | j = 1; | ||
2454 | size -= skb_shinfo(skb)->gso_size; | ||
2455 | if (size) | ||
2456 | j++; | ||
2457 | size += hdr_len; | ||
2458 | } | 2453 | } |
2459 | num_frags--; | 2454 | num_frags--; |
2460 | } while (num_frags); | 2455 | } while (num_frags); |
@@ -2724,7 +2719,7 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff *skb, | |||
2724 | if (tsyn) | 2719 | if (tsyn) |
2725 | tx_flags |= I40E_TX_FLAGS_TSYN; | 2720 | tx_flags |= I40E_TX_FLAGS_TSYN; |
2726 | 2721 | ||
2727 | if (i40e_chk_linearize(skb, tx_flags, hdr_len)) | 2722 | if (i40e_chk_linearize(skb, tx_flags)) |
2728 | if (skb_linearize(skb)) | 2723 | if (skb_linearize(skb)) |
2729 | goto out_drop; | 2724 | goto out_drop; |
2730 | 2725 | ||
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index 78d1c4ff565e..4e9376da0518 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | |||
@@ -1018,11 +1018,19 @@ int i40e_pci_sriov_configure(struct pci_dev *pdev, int num_vfs) | |||
1018 | { | 1018 | { |
1019 | struct i40e_pf *pf = pci_get_drvdata(pdev); | 1019 | struct i40e_pf *pf = pci_get_drvdata(pdev); |
1020 | 1020 | ||
1021 | if (num_vfs) | 1021 | if (num_vfs) { |
1022 | if (!(pf->flags & I40E_FLAG_VEB_MODE_ENABLED)) { | ||
1023 | pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; | ||
1024 | i40e_do_reset_safe(pf, | ||
1025 | BIT_ULL(__I40E_PF_RESET_REQUESTED)); | ||
1026 | } | ||
1022 | return i40e_pci_sriov_enable(pdev, num_vfs); | 1027 | return i40e_pci_sriov_enable(pdev, num_vfs); |
1028 | } | ||
1023 | 1029 | ||
1024 | if (!pci_vfs_assigned(pf->pdev)) { | 1030 | if (!pci_vfs_assigned(pf->pdev)) { |
1025 | i40e_free_vfs(pf); | 1031 | i40e_free_vfs(pf); |
1032 | pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED; | ||
1033 | i40e_do_reset_safe(pf, BIT_ULL(__I40E_PF_RESET_REQUESTED)); | ||
1026 | } else { | 1034 | } else { |
1027 | dev_warn(&pdev->dev, "Unable to free VFs because some are assigned to VMs.\n"); | 1035 | dev_warn(&pdev->dev, "Unable to free VFs because some are assigned to VMs.\n"); |
1028 | return -EINVAL; | 1036 | return -EINVAL; |
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c index b077e02a0cc7..458fbb421090 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c | |||
@@ -1619,14 +1619,12 @@ static void i40e_create_tx_ctx(struct i40e_ring *tx_ring, | |||
1619 | * i40e_chk_linearize - Check if there are more than 8 fragments per packet | 1619 | * i40e_chk_linearize - Check if there are more than 8 fragments per packet |
1620 | * @skb: send buffer | 1620 | * @skb: send buffer |
1621 | * @tx_flags: collected send information | 1621 | * @tx_flags: collected send information |
1622 | * @hdr_len: size of the packet header | ||
1623 | * | 1622 | * |
1624 | * Note: Our HW can't scatter-gather more than 8 fragments to build | 1623 | * Note: Our HW can't scatter-gather more than 8 fragments to build |
1625 | * a packet on the wire and so we need to figure out the cases where we | 1624 | * a packet on the wire and so we need to figure out the cases where we |
1626 | * need to linearize the skb. | 1625 | * need to linearize the skb. |
1627 | **/ | 1626 | **/ |
1628 | static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | 1627 | static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags) |
1629 | const u8 hdr_len) | ||
1630 | { | 1628 | { |
1631 | struct skb_frag_struct *frag; | 1629 | struct skb_frag_struct *frag; |
1632 | bool linearize = false; | 1630 | bool linearize = false; |
@@ -1638,7 +1636,7 @@ static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | |||
1638 | gso_segs = skb_shinfo(skb)->gso_segs; | 1636 | gso_segs = skb_shinfo(skb)->gso_segs; |
1639 | 1637 | ||
1640 | if (tx_flags & (I40E_TX_FLAGS_TSO | I40E_TX_FLAGS_FSO)) { | 1638 | if (tx_flags & (I40E_TX_FLAGS_TSO | I40E_TX_FLAGS_FSO)) { |
1641 | u16 j = 1; | 1639 | u16 j = 0; |
1642 | 1640 | ||
1643 | if (num_frags < (I40E_MAX_BUFFER_TXD)) | 1641 | if (num_frags < (I40E_MAX_BUFFER_TXD)) |
1644 | goto linearize_chk_done; | 1642 | goto linearize_chk_done; |
@@ -1649,21 +1647,18 @@ static bool i40e_chk_linearize(struct sk_buff *skb, u32 tx_flags, | |||
1649 | goto linearize_chk_done; | 1647 | goto linearize_chk_done; |
1650 | } | 1648 | } |
1651 | frag = &skb_shinfo(skb)->frags[0]; | 1649 | frag = &skb_shinfo(skb)->frags[0]; |
1652 | size = hdr_len; | ||
1653 | /* we might still have more fragments per segment */ | 1650 | /* we might still have more fragments per segment */ |
1654 | do { | 1651 | do { |
1655 | size += skb_frag_size(frag); | 1652 | size += skb_frag_size(frag); |
1656 | frag++; j++; | 1653 | frag++; j++; |
1654 | if ((size >= skb_shinfo(skb)->gso_size) && | ||
1655 | (j < I40E_MAX_BUFFER_TXD)) { | ||
1656 | size = (size % skb_shinfo(skb)->gso_size); | ||
1657 | j = (size) ? 1 : 0; | ||
1658 | } | ||
1657 | if (j == I40E_MAX_BUFFER_TXD) { | 1659 | if (j == I40E_MAX_BUFFER_TXD) { |
1658 | if (size < skb_shinfo(skb)->gso_size) { | 1660 | linearize = true; |
1659 | linearize = true; | 1661 | break; |
1660 | break; | ||
1661 | } | ||
1662 | j = 1; | ||
1663 | size -= skb_shinfo(skb)->gso_size; | ||
1664 | if (size) | ||
1665 | j++; | ||
1666 | size += hdr_len; | ||
1667 | } | 1662 | } |
1668 | num_frags--; | 1663 | num_frags--; |
1669 | } while (num_frags); | 1664 | } while (num_frags); |
@@ -1950,7 +1945,7 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff *skb, | |||
1950 | else if (tso) | 1945 | else if (tso) |
1951 | tx_flags |= I40E_TX_FLAGS_TSO; | 1946 | tx_flags |= I40E_TX_FLAGS_TSO; |
1952 | 1947 | ||
1953 | if (i40e_chk_linearize(skb, tx_flags, hdr_len)) | 1948 | if (i40e_chk_linearize(skb, tx_flags)) |
1954 | if (skb_linearize(skb)) | 1949 | if (skb_linearize(skb)) |
1955 | goto out_drop; | 1950 | goto out_drop; |
1956 | 1951 | ||
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index e3b9b63ad010..c3a9392cbc19 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c | |||
@@ -538,8 +538,8 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp, | |||
538 | igb->perout[i].start.tv_nsec = rq->perout.start.nsec; | 538 | igb->perout[i].start.tv_nsec = rq->perout.start.nsec; |
539 | igb->perout[i].period.tv_sec = ts.tv_sec; | 539 | igb->perout[i].period.tv_sec = ts.tv_sec; |
540 | igb->perout[i].period.tv_nsec = ts.tv_nsec; | 540 | igb->perout[i].period.tv_nsec = ts.tv_nsec; |
541 | wr32(trgttiml, rq->perout.start.sec); | 541 | wr32(trgttimh, rq->perout.start.sec); |
542 | wr32(trgttimh, rq->perout.start.nsec); | 542 | wr32(trgttiml, rq->perout.start.nsec); |
543 | tsauxc |= tsauxc_mask; | 543 | tsauxc |= tsauxc_mask; |
544 | tsim |= tsim_mask; | 544 | tsim |= tsim_mask; |
545 | } else { | 545 | } else { |
diff --git a/drivers/soc/mediatek/Kconfig b/drivers/soc/mediatek/Kconfig index bcdb22d5e215..3c1850332a90 100644 --- a/drivers/soc/mediatek/Kconfig +++ b/drivers/soc/mediatek/Kconfig | |||
@@ -4,6 +4,7 @@ | |||
4 | config MTK_PMIC_WRAP | 4 | config MTK_PMIC_WRAP |
5 | tristate "MediaTek PMIC Wrapper Support" | 5 | tristate "MediaTek PMIC Wrapper Support" |
6 | depends on ARCH_MEDIATEK | 6 | depends on ARCH_MEDIATEK |
7 | depends on RESET_CONTROLLER | ||
7 | select REGMAP | 8 | select REGMAP |
8 | help | 9 | help |
9 | Say yes here to add support for MediaTek PMIC Wrapper found | 10 | Say yes here to add support for MediaTek PMIC Wrapper found |
diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/mtk-pmic-wrap.c index db5be1eec54c..f432291feee9 100644 --- a/drivers/soc/mediatek/mtk-pmic-wrap.c +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c | |||
@@ -443,11 +443,6 @@ static int pwrap_wait_for_state(struct pmic_wrapper *wrp, | |||
443 | static int pwrap_write(struct pmic_wrapper *wrp, u32 adr, u32 wdata) | 443 | static int pwrap_write(struct pmic_wrapper *wrp, u32 adr, u32 wdata) |
444 | { | 444 | { |
445 | int ret; | 445 | int ret; |
446 | u32 val; | ||
447 | |||
448 | val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); | ||
449 | if (PWRAP_GET_WACS_FSM(val) == PWRAP_WACS_FSM_WFVLDCLR) | ||
450 | pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); | ||
451 | 446 | ||
452 | ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); | 447 | ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); |
453 | if (ret) | 448 | if (ret) |
@@ -462,11 +457,6 @@ static int pwrap_write(struct pmic_wrapper *wrp, u32 adr, u32 wdata) | |||
462 | static int pwrap_read(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) | 457 | static int pwrap_read(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) |
463 | { | 458 | { |
464 | int ret; | 459 | int ret; |
465 | u32 val; | ||
466 | |||
467 | val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); | ||
468 | if (PWRAP_GET_WACS_FSM(val) == PWRAP_WACS_FSM_WFVLDCLR) | ||
469 | pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); | ||
470 | 460 | ||
471 | ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); | 461 | ret = pwrap_wait_for_state(wrp, pwrap_is_fsm_idle); |
472 | if (ret) | 462 | if (ret) |
@@ -480,6 +470,8 @@ static int pwrap_read(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) | |||
480 | 470 | ||
481 | *rdata = PWRAP_GET_WACS_RDATA(pwrap_readl(wrp, PWRAP_WACS2_RDATA)); | 471 | *rdata = PWRAP_GET_WACS_RDATA(pwrap_readl(wrp, PWRAP_WACS2_RDATA)); |
482 | 472 | ||
473 | pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); | ||
474 | |||
483 | return 0; | 475 | return 0; |
484 | } | 476 | } |
485 | 477 | ||
@@ -563,45 +555,17 @@ static int pwrap_init_sidly(struct pmic_wrapper *wrp) | |||
563 | 555 | ||
564 | static int pwrap_init_reg_clock(struct pmic_wrapper *wrp) | 556 | static int pwrap_init_reg_clock(struct pmic_wrapper *wrp) |
565 | { | 557 | { |
566 | unsigned long rate_spi; | 558 | if (pwrap_is_mt8135(wrp)) { |
567 | int ck_mhz; | 559 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT); |
568 | |||
569 | rate_spi = clk_get_rate(wrp->clk_spi); | ||
570 | |||
571 | if (rate_spi > 26000000) | ||
572 | ck_mhz = 26; | ||
573 | else if (rate_spi > 18000000) | ||
574 | ck_mhz = 18; | ||
575 | else | ||
576 | ck_mhz = 0; | ||
577 | |||
578 | switch (ck_mhz) { | ||
579 | case 18: | ||
580 | if (pwrap_is_mt8135(wrp)) | ||
581 | pwrap_writel(wrp, 0xc, PWRAP_CSHEXT); | ||
582 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_WRITE); | ||
583 | pwrap_writel(wrp, 0xc, PWRAP_CSHEXT_READ); | ||
584 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_START); | ||
585 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_END); | ||
586 | break; | ||
587 | case 26: | ||
588 | if (pwrap_is_mt8135(wrp)) | ||
589 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT); | ||
590 | pwrap_writel(wrp, 0x0, PWRAP_CSHEXT_WRITE); | 560 | pwrap_writel(wrp, 0x0, PWRAP_CSHEXT_WRITE); |
591 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_READ); | 561 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_READ); |
592 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_START); | 562 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_START); |
593 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_END); | 563 | pwrap_writel(wrp, 0x0, PWRAP_CSLEXT_END); |
594 | break; | 564 | } else { |
595 | case 0: | 565 | pwrap_writel(wrp, 0x0, PWRAP_CSHEXT_WRITE); |
596 | if (pwrap_is_mt8135(wrp)) | 566 | pwrap_writel(wrp, 0x4, PWRAP_CSHEXT_READ); |
597 | pwrap_writel(wrp, 0xf, PWRAP_CSHEXT); | 567 | pwrap_writel(wrp, 0x2, PWRAP_CSLEXT_START); |
598 | pwrap_writel(wrp, 0xf, PWRAP_CSHEXT_WRITE); | 568 | pwrap_writel(wrp, 0x2, PWRAP_CSLEXT_END); |
599 | pwrap_writel(wrp, 0xf, PWRAP_CSHEXT_READ); | ||
600 | pwrap_writel(wrp, 0xf, PWRAP_CSLEXT_START); | ||
601 | pwrap_writel(wrp, 0xf, PWRAP_CSLEXT_END); | ||
602 | break; | ||
603 | default: | ||
604 | return -EINVAL; | ||
605 | } | 569 | } |
606 | 570 | ||
607 | return 0; | 571 | return 0; |
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index e894eb278d83..eba1b7ac7294 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c | |||
@@ -423,6 +423,7 @@ int vp_set_vq_affinity(struct virtqueue *vq, int cpu) | |||
423 | if (cpu == -1) | 423 | if (cpu == -1) |
424 | irq_set_affinity_hint(irq, NULL); | 424 | irq_set_affinity_hint(irq, NULL); |
425 | else { | 425 | else { |
426 | cpumask_clear(mask); | ||
426 | cpumask_set_cpu(cpu, mask); | 427 | cpumask_set_cpu(cpu, mask); |
427 | irq_set_affinity_hint(irq, mask); | 428 | irq_set_affinity_hint(irq, mask); |
428 | } | 429 | } |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 796ef9645827..a240e61a7700 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
@@ -115,13 +115,14 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
115 | * Extended Capability Register | 115 | * Extended Capability Register |
116 | */ | 116 | */ |
117 | 117 | ||
118 | #define ecap_pasid(e) ((e >> 40) & 0x1) | ||
118 | #define ecap_pss(e) ((e >> 35) & 0x1f) | 119 | #define ecap_pss(e) ((e >> 35) & 0x1f) |
119 | #define ecap_eafs(e) ((e >> 34) & 0x1) | 120 | #define ecap_eafs(e) ((e >> 34) & 0x1) |
120 | #define ecap_nwfs(e) ((e >> 33) & 0x1) | 121 | #define ecap_nwfs(e) ((e >> 33) & 0x1) |
121 | #define ecap_srs(e) ((e >> 31) & 0x1) | 122 | #define ecap_srs(e) ((e >> 31) & 0x1) |
122 | #define ecap_ers(e) ((e >> 30) & 0x1) | 123 | #define ecap_ers(e) ((e >> 30) & 0x1) |
123 | #define ecap_prs(e) ((e >> 29) & 0x1) | 124 | #define ecap_prs(e) ((e >> 29) & 0x1) |
124 | #define ecap_pasid(e) ((e >> 28) & 0x1) | 125 | /* PASID support used to be on bit 28 */ |
125 | #define ecap_dis(e) ((e >> 27) & 0x1) | 126 | #define ecap_dis(e) ((e >> 27) & 0x1) |
126 | #define ecap_nest(e) ((e >> 26) & 0x1) | 127 | #define ecap_nest(e) ((e >> 26) & 0x1) |
127 | #define ecap_mts(e) ((e >> 25) & 0x1) | 128 | #define ecap_mts(e) ((e >> 25) & 0x1) |
diff --git a/include/sound/hda_regmap.h b/include/sound/hda_regmap.h index 53a18b3635e2..df705908480a 100644 --- a/include/sound/hda_regmap.h +++ b/include/sound/hda_regmap.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #include <sound/core.h> | 9 | #include <sound/core.h> |
10 | #include <sound/hdaudio.h> | 10 | #include <sound/hdaudio.h> |
11 | 11 | ||
12 | #define AC_AMP_FAKE_MUTE 0x10 /* fake mute bit set to amp verbs */ | ||
13 | |||
12 | int snd_hdac_regmap_init(struct hdac_device *codec); | 14 | int snd_hdac_regmap_init(struct hdac_device *codec); |
13 | void snd_hdac_regmap_exit(struct hdac_device *codec); | 15 | void snd_hdac_regmap_exit(struct hdac_device *codec); |
14 | int snd_hdac_regmap_add_vendor_verb(struct hdac_device *codec, | 16 | int snd_hdac_regmap_add_vendor_verb(struct hdac_device *codec, |
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index a0831e1b99f4..aaeae885d9af 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c | |||
@@ -3900,7 +3900,8 @@ static void zap_class(struct lock_class *class) | |||
3900 | list_del_rcu(&class->hash_entry); | 3900 | list_del_rcu(&class->hash_entry); |
3901 | list_del_rcu(&class->lock_entry); | 3901 | list_del_rcu(&class->lock_entry); |
3902 | 3902 | ||
3903 | class->key = NULL; | 3903 | RCU_INIT_POINTER(class->key, NULL); |
3904 | RCU_INIT_POINTER(class->name, NULL); | ||
3904 | } | 3905 | } |
3905 | 3906 | ||
3906 | static inline int within(const void *addr, void *start, unsigned long size) | 3907 | static inline int within(const void *addr, void *start, unsigned long size) |
diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c index ef43ac4bafb5..d83d798bef95 100644 --- a/kernel/locking/lockdep_proc.c +++ b/kernel/locking/lockdep_proc.c | |||
@@ -426,10 +426,12 @@ static void seq_lock_time(struct seq_file *m, struct lock_time *lt) | |||
426 | 426 | ||
427 | static void seq_stats(struct seq_file *m, struct lock_stat_data *data) | 427 | static void seq_stats(struct seq_file *m, struct lock_stat_data *data) |
428 | { | 428 | { |
429 | char name[39]; | 429 | struct lockdep_subclass_key *ckey; |
430 | struct lock_class *class; | ||
431 | struct lock_class_stats *stats; | 430 | struct lock_class_stats *stats; |
431 | struct lock_class *class; | ||
432 | const char *cname; | ||
432 | int i, namelen; | 433 | int i, namelen; |
434 | char name[39]; | ||
433 | 435 | ||
434 | class = data->class; | 436 | class = data->class; |
435 | stats = &data->stats; | 437 | stats = &data->stats; |
@@ -440,15 +442,25 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data) | |||
440 | if (class->subclass) | 442 | if (class->subclass) |
441 | namelen -= 2; | 443 | namelen -= 2; |
442 | 444 | ||
443 | if (!class->name) { | 445 | rcu_read_lock_sched(); |
446 | cname = rcu_dereference_sched(class->name); | ||
447 | ckey = rcu_dereference_sched(class->key); | ||
448 | |||
449 | if (!cname && !ckey) { | ||
450 | rcu_read_unlock_sched(); | ||
451 | return; | ||
452 | |||
453 | } else if (!cname) { | ||
444 | char str[KSYM_NAME_LEN]; | 454 | char str[KSYM_NAME_LEN]; |
445 | const char *key_name; | 455 | const char *key_name; |
446 | 456 | ||
447 | key_name = __get_key_name(class->key, str); | 457 | key_name = __get_key_name(ckey, str); |
448 | snprintf(name, namelen, "%s", key_name); | 458 | snprintf(name, namelen, "%s", key_name); |
449 | } else { | 459 | } else { |
450 | snprintf(name, namelen, "%s", class->name); | 460 | snprintf(name, namelen, "%s", cname); |
451 | } | 461 | } |
462 | rcu_read_unlock_sched(); | ||
463 | |||
452 | namelen = strlen(name); | 464 | namelen = strlen(name); |
453 | if (class->name_version > 1) { | 465 | if (class->name_version > 1) { |
454 | snprintf(name+namelen, 3, "#%d", class->name_version); | 466 | snprintf(name+namelen, 3, "#%d", class->name_version); |
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index ffeaa4105e48..c2980e8733bc 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c | |||
@@ -2181,7 +2181,7 @@ void task_numa_work(struct callback_head *work) | |||
2181 | } | 2181 | } |
2182 | for (; vma; vma = vma->vm_next) { | 2182 | for (; vma; vma = vma->vm_next) { |
2183 | if (!vma_migratable(vma) || !vma_policy_mof(vma) || | 2183 | if (!vma_migratable(vma) || !vma_policy_mof(vma) || |
2184 | is_vm_hugetlb_page(vma)) { | 2184 | is_vm_hugetlb_page(vma) || (vma->vm_flags & VM_MIXEDMAP)) { |
2185 | continue; | 2185 | continue; |
2186 | } | 2186 | } |
2187 | 2187 | ||
diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c index 13d945c0d03f..1b28df2d9104 100644 --- a/kernel/trace/ring_buffer_benchmark.c +++ b/kernel/trace/ring_buffer_benchmark.c | |||
@@ -450,7 +450,7 @@ static int __init ring_buffer_benchmark_init(void) | |||
450 | 450 | ||
451 | if (producer_fifo >= 0) { | 451 | if (producer_fifo >= 0) { |
452 | struct sched_param param = { | 452 | struct sched_param param = { |
453 | .sched_priority = consumer_fifo | 453 | .sched_priority = producer_fifo |
454 | }; | 454 | }; |
455 | sched_setscheduler(producer, SCHED_FIFO, ¶m); | 455 | sched_setscheduler(producer, SCHED_FIFO, ¶m); |
456 | } else | 456 | } else |
diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 4396434e4715..8609378e6505 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/random.h> | 26 | #include <linux/random.h> |
27 | #include <linux/rhashtable.h> | 27 | #include <linux/rhashtable.h> |
28 | #include <linux/err.h> | 28 | #include <linux/err.h> |
29 | #include <linux/export.h> | ||
29 | 30 | ||
30 | #define HASH_DEFAULT_SIZE 64UL | 31 | #define HASH_DEFAULT_SIZE 64UL |
31 | #define HASH_MIN_SIZE 4U | 32 | #define HASH_MIN_SIZE 4U |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 14c2f2017e37..a04225d372ba 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -2323,6 +2323,8 @@ done_restock: | |||
2323 | css_get_many(&memcg->css, batch); | 2323 | css_get_many(&memcg->css, batch); |
2324 | if (batch > nr_pages) | 2324 | if (batch > nr_pages) |
2325 | refill_stock(memcg, batch - nr_pages); | 2325 | refill_stock(memcg, batch - nr_pages); |
2326 | if (!(gfp_mask & __GFP_WAIT)) | ||
2327 | goto done; | ||
2326 | /* | 2328 | /* |
2327 | * If the hierarchy is above the normal consumption range, | 2329 | * If the hierarchy is above the normal consumption range, |
2328 | * make the charging task trim their excess contribution. | 2330 | * make the charging task trim their excess contribution. |
@@ -5833,9 +5835,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) | |||
5833 | if (!mem_cgroup_is_root(memcg)) | 5835 | if (!mem_cgroup_is_root(memcg)) |
5834 | page_counter_uncharge(&memcg->memory, 1); | 5836 | page_counter_uncharge(&memcg->memory, 1); |
5835 | 5837 | ||
5836 | /* XXX: caller holds IRQ-safe mapping->tree_lock */ | 5838 | /* Caller disabled preemption with mapping->tree_lock */ |
5837 | VM_BUG_ON(!irqs_disabled()); | ||
5838 | |||
5839 | mem_cgroup_charge_statistics(memcg, page, -1); | 5839 | mem_cgroup_charge_statistics(memcg, page, -1); |
5840 | memcg_check_events(memcg, page); | 5840 | memcg_check_events(memcg, page); |
5841 | } | 5841 | } |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 457bde530cbe..9e88f749aa51 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
@@ -1969,8 +1969,10 @@ void try_offline_node(int nid) | |||
1969 | * wait_table may be allocated from boot memory, | 1969 | * wait_table may be allocated from boot memory, |
1970 | * here only free if it's allocated by vmalloc. | 1970 | * here only free if it's allocated by vmalloc. |
1971 | */ | 1971 | */ |
1972 | if (is_vmalloc_addr(zone->wait_table)) | 1972 | if (is_vmalloc_addr(zone->wait_table)) { |
1973 | vfree(zone->wait_table); | 1973 | vfree(zone->wait_table); |
1974 | zone->wait_table = NULL; | ||
1975 | } | ||
1974 | } | 1976 | } |
1975 | } | 1977 | } |
1976 | EXPORT_SYMBOL(try_offline_node); | 1978 | EXPORT_SYMBOL(try_offline_node); |
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 08bd7a3d464a..a8b5e749e84e 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c | |||
@@ -289,7 +289,8 @@ static int create_handle_cache(struct zs_pool *pool) | |||
289 | 289 | ||
290 | static void destroy_handle_cache(struct zs_pool *pool) | 290 | static void destroy_handle_cache(struct zs_pool *pool) |
291 | { | 291 | { |
292 | kmem_cache_destroy(pool->handle_cachep); | 292 | if (pool->handle_cachep) |
293 | kmem_cache_destroy(pool->handle_cachep); | ||
293 | } | 294 | } |
294 | 295 | ||
295 | static unsigned long alloc_handle(struct zs_pool *pool) | 296 | static unsigned long alloc_handle(struct zs_pool *pool) |
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index e0670d7054f9..659fb96672e4 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c | |||
@@ -796,9 +796,11 @@ static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge_port *p, | |||
796 | int err = 0; | 796 | int err = 0; |
797 | 797 | ||
798 | if (ndm->ndm_flags & NTF_USE) { | 798 | if (ndm->ndm_flags & NTF_USE) { |
799 | local_bh_disable(); | ||
799 | rcu_read_lock(); | 800 | rcu_read_lock(); |
800 | br_fdb_update(p->br, p, addr, vid, true); | 801 | br_fdb_update(p->br, p, addr, vid, true); |
801 | rcu_read_unlock(); | 802 | rcu_read_unlock(); |
803 | local_bh_enable(); | ||
802 | } else { | 804 | } else { |
803 | spin_lock_bh(&p->br->hash_lock); | 805 | spin_lock_bh(&p->br->hash_lock); |
804 | err = fdb_add_entry(p, addr, ndm->ndm_state, | 806 | err = fdb_add_entry(p, addr, ndm->ndm_state, |
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 22fd0419b314..ff667e18b2d6 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -1167,6 +1167,9 @@ static void br_multicast_add_router(struct net_bridge *br, | |||
1167 | struct net_bridge_port *p; | 1167 | struct net_bridge_port *p; |
1168 | struct hlist_node *slot = NULL; | 1168 | struct hlist_node *slot = NULL; |
1169 | 1169 | ||
1170 | if (!hlist_unhashed(&port->rlist)) | ||
1171 | return; | ||
1172 | |||
1170 | hlist_for_each_entry(p, &br->router_list, rlist) { | 1173 | hlist_for_each_entry(p, &br->router_list, rlist) { |
1171 | if ((unsigned long) port >= (unsigned long) p) | 1174 | if ((unsigned long) port >= (unsigned long) p) |
1172 | break; | 1175 | break; |
@@ -1194,12 +1197,8 @@ static void br_multicast_mark_router(struct net_bridge *br, | |||
1194 | if (port->multicast_router != 1) | 1197 | if (port->multicast_router != 1) |
1195 | return; | 1198 | return; |
1196 | 1199 | ||
1197 | if (!hlist_unhashed(&port->rlist)) | ||
1198 | goto timer; | ||
1199 | |||
1200 | br_multicast_add_router(br, port); | 1200 | br_multicast_add_router(br, port); |
1201 | 1201 | ||
1202 | timer: | ||
1203 | mod_timer(&port->multicast_router_timer, | 1202 | mod_timer(&port->multicast_router_timer, |
1204 | now + br->multicast_querier_interval); | 1203 | now + br->multicast_querier_interval); |
1205 | } | 1204 | } |
diff --git a/net/core/dev.c b/net/core/dev.c index 2c1c67fad64d..aa82f9ab6a36 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1718,15 +1718,8 @@ EXPORT_SYMBOL_GPL(is_skb_forwardable); | |||
1718 | 1718 | ||
1719 | int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) | 1719 | int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) |
1720 | { | 1720 | { |
1721 | if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { | 1721 | if (skb_orphan_frags(skb, GFP_ATOMIC) || |
1722 | if (skb_copy_ubufs(skb, GFP_ATOMIC)) { | 1722 | unlikely(!is_skb_forwardable(dev, skb))) { |
1723 | atomic_long_inc(&dev->rx_dropped); | ||
1724 | kfree_skb(skb); | ||
1725 | return NET_RX_DROP; | ||
1726 | } | ||
1727 | } | ||
1728 | |||
1729 | if (unlikely(!is_skb_forwardable(dev, skb))) { | ||
1730 | atomic_long_inc(&dev->rx_dropped); | 1723 | atomic_long_inc(&dev->rx_dropped); |
1731 | kfree_skb(skb); | 1724 | kfree_skb(skb); |
1732 | return NET_RX_DROP; | 1725 | return NET_RX_DROP; |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3cfff2a3d651..41ec02242ea7 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -4398,7 +4398,7 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len, | |||
4398 | 4398 | ||
4399 | while (order) { | 4399 | while (order) { |
4400 | if (npages >= 1 << order) { | 4400 | if (npages >= 1 << order) { |
4401 | page = alloc_pages(gfp_mask | | 4401 | page = alloc_pages((gfp_mask & ~__GFP_WAIT) | |
4402 | __GFP_COMP | | 4402 | __GFP_COMP | |
4403 | __GFP_NOWARN | | 4403 | __GFP_NOWARN | |
4404 | __GFP_NORETRY, | 4404 | __GFP_NORETRY, |
diff --git a/net/core/sock.c b/net/core/sock.c index 292f42228bfb..dc30dc5bb1b8 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -354,15 +354,12 @@ void sk_clear_memalloc(struct sock *sk) | |||
354 | 354 | ||
355 | /* | 355 | /* |
356 | * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward | 356 | * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward |
357 | * progress of swapping. However, if SOCK_MEMALLOC is cleared while | 357 | * progress of swapping. SOCK_MEMALLOC may be cleared while |
358 | * it has rmem allocations there is a risk that the user of the | 358 | * it has rmem allocations due to the last swapfile being deactivated |
359 | * socket cannot make forward progress due to exceeding the rmem | 359 | * but there is a risk that the socket is unusable due to exceeding |
360 | * limits. By rights, sk_clear_memalloc() should only be called | 360 | * the rmem limits. Reclaim the reserves and obey rmem limits again. |
361 | * on sockets being torn down but warn and reset the accounting if | ||
362 | * that assumption breaks. | ||
363 | */ | 361 | */ |
364 | if (WARN_ON(sk->sk_forward_alloc)) | 362 | sk_mem_reclaim(sk); |
365 | sk_mem_reclaim(sk); | ||
366 | } | 363 | } |
367 | EXPORT_SYMBOL_GPL(sk_clear_memalloc); | 364 | EXPORT_SYMBOL_GPL(sk_clear_memalloc); |
368 | 365 | ||
@@ -1883,7 +1880,7 @@ bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp) | |||
1883 | 1880 | ||
1884 | pfrag->offset = 0; | 1881 | pfrag->offset = 0; |
1885 | if (SKB_FRAG_PAGE_ORDER) { | 1882 | if (SKB_FRAG_PAGE_ORDER) { |
1886 | pfrag->page = alloc_pages(gfp | __GFP_COMP | | 1883 | pfrag->page = alloc_pages((gfp & ~__GFP_WAIT) | __GFP_COMP | |
1887 | __GFP_NOWARN | __GFP_NORETRY, | 1884 | __GFP_NOWARN | __GFP_NORETRY, |
1888 | SKB_FRAG_PAGE_ORDER); | 1885 | SKB_FRAG_PAGE_ORDER); |
1889 | if (likely(pfrag->page)) { | 1886 | if (likely(pfrag->page)) { |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 1c92ea67baef..83aa604f9273 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -90,6 +90,7 @@ | |||
90 | #include <linux/socket.h> | 90 | #include <linux/socket.h> |
91 | #include <linux/sockios.h> | 91 | #include <linux/sockios.h> |
92 | #include <linux/igmp.h> | 92 | #include <linux/igmp.h> |
93 | #include <linux/inetdevice.h> | ||
93 | #include <linux/in.h> | 94 | #include <linux/in.h> |
94 | #include <linux/errno.h> | 95 | #include <linux/errno.h> |
95 | #include <linux/timer.h> | 96 | #include <linux/timer.h> |
@@ -1960,6 +1961,7 @@ void udp_v4_early_demux(struct sk_buff *skb) | |||
1960 | struct sock *sk; | 1961 | struct sock *sk; |
1961 | struct dst_entry *dst; | 1962 | struct dst_entry *dst; |
1962 | int dif = skb->dev->ifindex; | 1963 | int dif = skb->dev->ifindex; |
1964 | int ours; | ||
1963 | 1965 | ||
1964 | /* validate the packet */ | 1966 | /* validate the packet */ |
1965 | if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct udphdr))) | 1967 | if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct udphdr))) |
@@ -1969,14 +1971,24 @@ void udp_v4_early_demux(struct sk_buff *skb) | |||
1969 | uh = udp_hdr(skb); | 1971 | uh = udp_hdr(skb); |
1970 | 1972 | ||
1971 | if (skb->pkt_type == PACKET_BROADCAST || | 1973 | if (skb->pkt_type == PACKET_BROADCAST || |
1972 | skb->pkt_type == PACKET_MULTICAST) | 1974 | skb->pkt_type == PACKET_MULTICAST) { |
1975 | struct in_device *in_dev = __in_dev_get_rcu(skb->dev); | ||
1976 | |||
1977 | if (!in_dev) | ||
1978 | return; | ||
1979 | |||
1980 | ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr, | ||
1981 | iph->protocol); | ||
1982 | if (!ours) | ||
1983 | return; | ||
1973 | sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr, | 1984 | sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr, |
1974 | uh->source, iph->saddr, dif); | 1985 | uh->source, iph->saddr, dif); |
1975 | else if (skb->pkt_type == PACKET_HOST) | 1986 | } else if (skb->pkt_type == PACKET_HOST) { |
1976 | sk = __udp4_lib_demux_lookup(net, uh->dest, iph->daddr, | 1987 | sk = __udp4_lib_demux_lookup(net, uh->dest, iph->daddr, |
1977 | uh->source, iph->saddr, dif); | 1988 | uh->source, iph->saddr, dif); |
1978 | else | 1989 | } else { |
1979 | return; | 1990 | return; |
1991 | } | ||
1980 | 1992 | ||
1981 | if (!sk) | 1993 | if (!sk) |
1982 | return; | 1994 | return; |
diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c index d873ceea86e6..ca09bf49ac68 100644 --- a/net/ipv6/addrconf_core.c +++ b/net/ipv6/addrconf_core.c | |||
@@ -133,6 +133,14 @@ static void snmp6_free_dev(struct inet6_dev *idev) | |||
133 | free_percpu(idev->stats.ipv6); | 133 | free_percpu(idev->stats.ipv6); |
134 | } | 134 | } |
135 | 135 | ||
136 | static void in6_dev_finish_destroy_rcu(struct rcu_head *head) | ||
137 | { | ||
138 | struct inet6_dev *idev = container_of(head, struct inet6_dev, rcu); | ||
139 | |||
140 | snmp6_free_dev(idev); | ||
141 | kfree(idev); | ||
142 | } | ||
143 | |||
136 | /* Nobody refers to this device, we may destroy it. */ | 144 | /* Nobody refers to this device, we may destroy it. */ |
137 | 145 | ||
138 | void in6_dev_finish_destroy(struct inet6_dev *idev) | 146 | void in6_dev_finish_destroy(struct inet6_dev *idev) |
@@ -151,7 +159,6 @@ void in6_dev_finish_destroy(struct inet6_dev *idev) | |||
151 | pr_warn("Freeing alive inet6 device %p\n", idev); | 159 | pr_warn("Freeing alive inet6 device %p\n", idev); |
152 | return; | 160 | return; |
153 | } | 161 | } |
154 | snmp6_free_dev(idev); | 162 | call_rcu(&idev->rcu, in6_dev_finish_destroy_rcu); |
155 | kfree_rcu(idev, rcu); | ||
156 | } | 163 | } |
157 | EXPORT_SYMBOL(in6_dev_finish_destroy); | 164 | EXPORT_SYMBOL(in6_dev_finish_destroy); |
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c index 7b3f732269e4..1f93a5978f2a 100644 --- a/net/mpls/af_mpls.c +++ b/net/mpls/af_mpls.c | |||
@@ -541,7 +541,7 @@ static void mpls_ifdown(struct net_device *dev) | |||
541 | 541 | ||
542 | RCU_INIT_POINTER(dev->mpls_ptr, NULL); | 542 | RCU_INIT_POINTER(dev->mpls_ptr, NULL); |
543 | 543 | ||
544 | kfree(mdev); | 544 | kfree_rcu(mdev, rcu); |
545 | } | 545 | } |
546 | 546 | ||
547 | static int mpls_dev_notify(struct notifier_block *this, unsigned long event, | 547 | static int mpls_dev_notify(struct notifier_block *this, unsigned long event, |
@@ -564,6 +564,17 @@ static int mpls_dev_notify(struct notifier_block *this, unsigned long event, | |||
564 | case NETDEV_UNREGISTER: | 564 | case NETDEV_UNREGISTER: |
565 | mpls_ifdown(dev); | 565 | mpls_ifdown(dev); |
566 | break; | 566 | break; |
567 | case NETDEV_CHANGENAME: | ||
568 | mdev = mpls_dev_get(dev); | ||
569 | if (mdev) { | ||
570 | int err; | ||
571 | |||
572 | mpls_dev_sysctl_unregister(mdev); | ||
573 | err = mpls_dev_sysctl_register(dev, mdev); | ||
574 | if (err) | ||
575 | return notifier_from_errno(err); | ||
576 | } | ||
577 | break; | ||
567 | } | 578 | } |
568 | return NOTIFY_OK; | 579 | return NOTIFY_OK; |
569 | } | 580 | } |
diff --git a/net/mpls/internal.h b/net/mpls/internal.h index b064c345042c..8cabeb5a1cb9 100644 --- a/net/mpls/internal.h +++ b/net/mpls/internal.h | |||
@@ -16,6 +16,7 @@ struct mpls_dev { | |||
16 | int input_enabled; | 16 | int input_enabled; |
17 | 17 | ||
18 | struct ctl_table_header *sysctl; | 18 | struct ctl_table_header *sysctl; |
19 | struct rcu_head rcu; | ||
19 | }; | 20 | }; |
20 | 21 | ||
21 | struct sk_buff; | 22 | struct sk_buff; |
diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index 4776282c6417..33e6d6e2908f 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c | |||
@@ -125,6 +125,7 @@ static struct vport *netdev_create(const struct vport_parms *parms) | |||
125 | if (err) | 125 | if (err) |
126 | goto error_master_upper_dev_unlink; | 126 | goto error_master_upper_dev_unlink; |
127 | 127 | ||
128 | dev_disable_lro(netdev_vport->dev); | ||
128 | dev_set_promiscuity(netdev_vport->dev, 1); | 129 | dev_set_promiscuity(netdev_vport->dev, 1); |
129 | netdev_vport->dev->priv_flags |= IFF_OVS_DATAPATH; | 130 | netdev_vport->dev->priv_flags |= IFF_OVS_DATAPATH; |
130 | rtnl_unlock(); | 131 | rtnl_unlock(); |
diff --git a/net/sctp/auth.c b/net/sctp/auth.c index fb7976aee61c..4f15b7d730e1 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c | |||
@@ -381,13 +381,14 @@ nomem: | |||
381 | } | 381 | } |
382 | 382 | ||
383 | 383 | ||
384 | /* Public interface to creat the association shared key. | 384 | /* Public interface to create the association shared key. |
385 | * See code above for the algorithm. | 385 | * See code above for the algorithm. |
386 | */ | 386 | */ |
387 | int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp) | 387 | int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp) |
388 | { | 388 | { |
389 | struct sctp_auth_bytes *secret; | 389 | struct sctp_auth_bytes *secret; |
390 | struct sctp_shared_key *ep_key; | 390 | struct sctp_shared_key *ep_key; |
391 | struct sctp_chunk *chunk; | ||
391 | 392 | ||
392 | /* If we don't support AUTH, or peer is not capable | 393 | /* If we don't support AUTH, or peer is not capable |
393 | * we don't need to do anything. | 394 | * we don't need to do anything. |
@@ -410,6 +411,14 @@ int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp) | |||
410 | sctp_auth_key_put(asoc->asoc_shared_key); | 411 | sctp_auth_key_put(asoc->asoc_shared_key); |
411 | asoc->asoc_shared_key = secret; | 412 | asoc->asoc_shared_key = secret; |
412 | 413 | ||
414 | /* Update send queue in case any chunk already in there now | ||
415 | * needs authenticating | ||
416 | */ | ||
417 | list_for_each_entry(chunk, &asoc->outqueue.out_chunk_list, list) { | ||
418 | if (sctp_auth_send_cid(chunk->chunk_hdr->type, asoc)) | ||
419 | chunk->auth = 1; | ||
420 | } | ||
421 | |||
413 | return 0; | 422 | return 0; |
414 | } | 423 | } |
415 | 424 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 9074b5cede38..f485600c4507 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -2142,11 +2142,17 @@ static void tipc_sk_timeout(unsigned long data) | |||
2142 | peer_node = tsk_peer_node(tsk); | 2142 | peer_node = tsk_peer_node(tsk); |
2143 | 2143 | ||
2144 | if (tsk->probing_state == TIPC_CONN_PROBING) { | 2144 | if (tsk->probing_state == TIPC_CONN_PROBING) { |
2145 | /* Previous probe not answered -> self abort */ | 2145 | if (!sock_owned_by_user(sk)) { |
2146 | skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE, | 2146 | sk->sk_socket->state = SS_DISCONNECTING; |
2147 | TIPC_CONN_MSG, SHORT_H_SIZE, 0, | 2147 | tsk->connected = 0; |
2148 | own_node, peer_node, tsk->portid, | 2148 | tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk), |
2149 | peer_port, TIPC_ERR_NO_PORT); | 2149 | tsk_peer_port(tsk)); |
2150 | sk->sk_state_change(sk); | ||
2151 | } else { | ||
2152 | /* Try again later */ | ||
2153 | sk_reset_timer(sk, &sk->sk_timer, (HZ / 20)); | ||
2154 | } | ||
2155 | |||
2150 | } else { | 2156 | } else { |
2151 | skb = tipc_msg_create(CONN_MANAGER, CONN_PROBE, | 2157 | skb = tipc_msg_create(CONN_MANAGER, CONN_PROBE, |
2152 | INT_H_SIZE, 0, peer_node, own_node, | 2158 | INT_H_SIZE, 0, peer_node, own_node, |
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index fff1bef6ed6d..fd682832a0e3 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
@@ -1333,6 +1333,8 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev) | |||
1333 | memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN); | 1333 | memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN); |
1334 | wdev_unlock(wdev); | 1334 | wdev_unlock(wdev); |
1335 | 1335 | ||
1336 | memset(&sinfo, 0, sizeof(sinfo)); | ||
1337 | |||
1336 | if (rdev_get_station(rdev, dev, bssid, &sinfo)) | 1338 | if (rdev_get_station(rdev, dev, bssid, &sinfo)) |
1337 | return NULL; | 1339 | return NULL; |
1338 | 1340 | ||
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 89b1df4e72ab..c5ec977b9c37 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -3169,12 +3169,12 @@ sub process { | |||
3169 | } | 3169 | } |
3170 | 3170 | ||
3171 | # check for global initialisers. | 3171 | # check for global initialisers. |
3172 | if ($line =~ /^\+(\s*$Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/) { | 3172 | if ($line =~ /^\+$Type\s*$Ident(?:\s+$Modifier)*\s*=\s*(?:0|NULL|false)\s*;/) { |
3173 | if (ERROR("GLOBAL_INITIALISERS", | 3173 | if (ERROR("GLOBAL_INITIALISERS", |
3174 | "do not initialise globals to 0 or NULL\n" . | 3174 | "do not initialise globals to 0 or NULL\n" . |
3175 | $herecurr) && | 3175 | $herecurr) && |
3176 | $fix) { | 3176 | $fix) { |
3177 | $fixed[$fixlinenr] =~ s/($Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/$1;/; | 3177 | $fixed[$fixlinenr] =~ s/(^.$Type\s*$Ident(?:\s+$Modifier)*)\s*=\s*(0|NULL|false)\s*;/$1;/; |
3178 | } | 3178 | } |
3179 | } | 3179 | } |
3180 | # check for static initialisers. | 3180 | # check for static initialisers. |
diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c index 7371e0c3926f..1eabcdf69457 100644 --- a/sound/hda/hdac_regmap.c +++ b/sound/hda/hdac_regmap.c | |||
@@ -246,6 +246,9 @@ static int hda_reg_read(void *context, unsigned int reg, unsigned int *val) | |||
246 | return hda_reg_read_stereo_amp(codec, reg, val); | 246 | return hda_reg_read_stereo_amp(codec, reg, val); |
247 | if (verb == AC_VERB_GET_PROC_COEF) | 247 | if (verb == AC_VERB_GET_PROC_COEF) |
248 | return hda_reg_read_coef(codec, reg, val); | 248 | return hda_reg_read_coef(codec, reg, val); |
249 | if ((verb & 0x700) == AC_VERB_SET_AMP_GAIN_MUTE) | ||
250 | reg &= ~AC_AMP_FAKE_MUTE; | ||
251 | |||
249 | err = snd_hdac_exec_verb(codec, reg, 0, val); | 252 | err = snd_hdac_exec_verb(codec, reg, 0, val); |
250 | if (err < 0) | 253 | if (err < 0) |
251 | return err; | 254 | return err; |
@@ -265,6 +268,9 @@ static int hda_reg_write(void *context, unsigned int reg, unsigned int val) | |||
265 | unsigned int verb; | 268 | unsigned int verb; |
266 | int i, bytes, err; | 269 | int i, bytes, err; |
267 | 270 | ||
271 | if (codec->caps_overwriting) | ||
272 | return 0; | ||
273 | |||
268 | reg &= ~0x00080000U; /* drop GET bit */ | 274 | reg &= ~0x00080000U; /* drop GET bit */ |
269 | reg |= (codec->addr << 28); | 275 | reg |= (codec->addr << 28); |
270 | verb = get_verb(reg); | 276 | verb = get_verb(reg); |
@@ -280,6 +286,8 @@ static int hda_reg_write(void *context, unsigned int reg, unsigned int val) | |||
280 | 286 | ||
281 | switch (verb & 0xf00) { | 287 | switch (verb & 0xf00) { |
282 | case AC_VERB_SET_AMP_GAIN_MUTE: | 288 | case AC_VERB_SET_AMP_GAIN_MUTE: |
289 | if ((reg & AC_AMP_FAKE_MUTE) && (val & AC_AMP_MUTE)) | ||
290 | val = 0; | ||
283 | verb = AC_VERB_SET_AMP_GAIN_MUTE; | 291 | verb = AC_VERB_SET_AMP_GAIN_MUTE; |
284 | if (reg & AC_AMP_GET_LEFT) | 292 | if (reg & AC_AMP_GET_LEFT) |
285 | verb |= AC_AMP_SET_LEFT >> 8; | 293 | verb |= AC_AMP_SET_LEFT >> 8; |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index b49feff0a319..5645481af3d9 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -436,7 +436,7 @@ static unsigned int get_num_devices(struct hda_codec *codec, hda_nid_t nid) | |||
436 | get_wcaps_type(wcaps) != AC_WID_PIN) | 436 | get_wcaps_type(wcaps) != AC_WID_PIN) |
437 | return 0; | 437 | return 0; |
438 | 438 | ||
439 | parm = snd_hda_param_read(codec, nid, AC_PAR_DEVLIST_LEN); | 439 | parm = snd_hdac_read_parm_uncached(&codec->core, nid, AC_PAR_DEVLIST_LEN); |
440 | if (parm == -1 && codec->bus->rirb_error) | 440 | if (parm == -1 && codec->bus->rirb_error) |
441 | parm = 0; | 441 | parm = 0; |
442 | return parm & AC_DEV_LIST_LEN_MASK; | 442 | return parm & AC_DEV_LIST_LEN_MASK; |
@@ -1376,6 +1376,31 @@ int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir, | |||
1376 | EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps); | 1376 | EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps); |
1377 | 1377 | ||
1378 | /** | 1378 | /** |
1379 | * snd_hda_codec_amp_update - update the AMP mono value | ||
1380 | * @codec: HD-audio codec | ||
1381 | * @nid: NID to read the AMP value | ||
1382 | * @ch: channel to update (0 or 1) | ||
1383 | * @dir: #HDA_INPUT or #HDA_OUTPUT | ||
1384 | * @idx: the index value (only for input direction) | ||
1385 | * @mask: bit mask to set | ||
1386 | * @val: the bits value to set | ||
1387 | * | ||
1388 | * Update the AMP values for the given channel, direction and index. | ||
1389 | */ | ||
1390 | int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, | ||
1391 | int ch, int dir, int idx, int mask, int val) | ||
1392 | { | ||
1393 | unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx); | ||
1394 | |||
1395 | /* enable fake mute if no h/w mute but min=mute */ | ||
1396 | if ((query_amp_caps(codec, nid, dir) & | ||
1397 | (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE) | ||
1398 | cmd |= AC_AMP_FAKE_MUTE; | ||
1399 | return snd_hdac_regmap_update_raw(&codec->core, cmd, mask, val); | ||
1400 | } | ||
1401 | EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update); | ||
1402 | |||
1403 | /** | ||
1379 | * snd_hda_codec_amp_stereo - update the AMP stereo values | 1404 | * snd_hda_codec_amp_stereo - update the AMP stereo values |
1380 | * @codec: HD-audio codec | 1405 | * @codec: HD-audio codec |
1381 | * @nid: NID to read the AMP value | 1406 | * @nid: NID to read the AMP value |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index fea198c58196..a244ba706317 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -340,6 +340,11 @@ enum { | |||
340 | #define use_vga_switcheroo(chip) 0 | 340 | #define use_vga_switcheroo(chip) 0 |
341 | #endif | 341 | #endif |
342 | 342 | ||
343 | #define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \ | ||
344 | ((pci)->device == 0x0c0c) || \ | ||
345 | ((pci)->device == 0x0d0c) || \ | ||
346 | ((pci)->device == 0x160c)) | ||
347 | |||
343 | static char *driver_short_names[] = { | 348 | static char *driver_short_names[] = { |
344 | [AZX_DRIVER_ICH] = "HDA Intel", | 349 | [AZX_DRIVER_ICH] = "HDA Intel", |
345 | [AZX_DRIVER_PCH] = "HDA Intel PCH", | 350 | [AZX_DRIVER_PCH] = "HDA Intel PCH", |
@@ -1854,8 +1859,17 @@ static int azx_probe_continue(struct azx *chip) | |||
1854 | if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) { | 1859 | if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) { |
1855 | #ifdef CONFIG_SND_HDA_I915 | 1860 | #ifdef CONFIG_SND_HDA_I915 |
1856 | err = hda_i915_init(hda); | 1861 | err = hda_i915_init(hda); |
1857 | if (err < 0) | 1862 | if (err < 0) { |
1858 | goto out_free; | 1863 | /* if the controller is bound only with HDMI/DP |
1864 | * (for HSW and BDW), we need to abort the probe; | ||
1865 | * for other chips, still continue probing as other | ||
1866 | * codecs can be on the same link. | ||
1867 | */ | ||
1868 | if (CONTROLLER_IN_GPU(pci)) | ||
1869 | goto out_free; | ||
1870 | else | ||
1871 | goto skip_i915; | ||
1872 | } | ||
1859 | err = hda_display_power(hda, true); | 1873 | err = hda_display_power(hda, true); |
1860 | if (err < 0) { | 1874 | if (err < 0) { |
1861 | dev_err(chip->card->dev, | 1875 | dev_err(chip->card->dev, |
@@ -1865,6 +1879,7 @@ static int azx_probe_continue(struct azx *chip) | |||
1865 | #endif | 1879 | #endif |
1866 | } | 1880 | } |
1867 | 1881 | ||
1882 | skip_i915: | ||
1868 | err = azx_first_init(chip); | 1883 | err = azx_first_init(chip); |
1869 | if (err < 0) | 1884 | if (err < 0) |
1870 | goto out_free; | 1885 | goto out_free; |
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h index 3b567f42296b..bed66c314431 100644 --- a/sound/pci/hda/hda_local.h +++ b/sound/pci/hda/hda_local.h | |||
@@ -129,8 +129,8 @@ int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol, | |||
129 | /* lowlevel accessor with caching; use carefully */ | 129 | /* lowlevel accessor with caching; use carefully */ |
130 | #define snd_hda_codec_amp_read(codec, nid, ch, dir, idx) \ | 130 | #define snd_hda_codec_amp_read(codec, nid, ch, dir, idx) \ |
131 | snd_hdac_regmap_get_amp(&(codec)->core, nid, ch, dir, idx) | 131 | snd_hdac_regmap_get_amp(&(codec)->core, nid, ch, dir, idx) |
132 | #define snd_hda_codec_amp_update(codec, nid, ch, dir, idx, mask, val) \ | 132 | int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, |
133 | snd_hdac_regmap_update_amp(&(codec)->core, nid, ch, dir, idx, mask, val) | 133 | int ch, int dir, int idx, int mask, int val); |
134 | int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid, | 134 | int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid, |
135 | int dir, int idx, int mask, int val); | 135 | int dir, int idx, int mask, int val); |
136 | int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch, | 136 | int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch, |
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index b8c97d092a47..754e689596a2 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c | |||
@@ -1267,8 +1267,9 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, | |||
1267 | if (fp->altsetting == 2) | 1267 | if (fp->altsetting == 2) |
1268 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | 1268 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; |
1269 | break; | 1269 | break; |
1270 | /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ | 1270 | |
1271 | case USB_ID(0x20b1, 0x2009): | 1271 | case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ |
1272 | case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ | ||
1272 | if (fp->altsetting == 3) | 1273 | if (fp->altsetting == 3) |
1273 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | 1274 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; |
1274 | break; | 1275 | break; |