diff options
88 files changed, 539 insertions, 395 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 | ||
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 4 | 1 | VERSION = 4 |
| 2 | PATCHLEVEL = 1 | 2 | PATCHLEVEL = 1 |
| 3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
| 4 | EXTRAVERSION = -rc6 | 4 | EXTRAVERSION = -rc7 |
| 5 | NAME = Hurr durr I'ma sheep | 5 | NAME = Hurr durr I'ma sheep |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
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/mips/ath79/setup.c b/arch/mips/ath79/setup.c index a73c93c3d44a..7fc8397d16f2 100644 --- a/arch/mips/ath79/setup.c +++ b/arch/mips/ath79/setup.c | |||
| @@ -225,7 +225,7 @@ void __init plat_time_init(void) | |||
| 225 | ddr_clk_rate = ath79_get_sys_clk_rate("ddr"); | 225 | ddr_clk_rate = ath79_get_sys_clk_rate("ddr"); |
| 226 | ref_clk_rate = ath79_get_sys_clk_rate("ref"); | 226 | ref_clk_rate = ath79_get_sys_clk_rate("ref"); |
| 227 | 227 | ||
| 228 | pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, Ref:%lu.%03luMHz", | 228 | pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, Ref:%lu.%03luMHz\n", |
| 229 | cpu_clk_rate / 1000000, (cpu_clk_rate / 1000) % 1000, | 229 | cpu_clk_rate / 1000000, (cpu_clk_rate / 1000) % 1000, |
| 230 | ddr_clk_rate / 1000000, (ddr_clk_rate / 1000) % 1000, | 230 | ddr_clk_rate / 1000000, (ddr_clk_rate / 1000) % 1000, |
| 231 | ahb_clk_rate / 1000000, (ahb_clk_rate / 1000) % 1000, | 231 | ahb_clk_rate / 1000000, (ahb_clk_rate / 1000) % 1000, |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index e36515dcd3b2..209e5b76c1bc 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
| @@ -74,13 +74,12 @@ static inline void cpu_set_fpu_fcsr_mask(struct cpuinfo_mips *c) | |||
| 74 | { | 74 | { |
| 75 | unsigned long sr, mask, fcsr, fcsr0, fcsr1; | 75 | unsigned long sr, mask, fcsr, fcsr0, fcsr1; |
| 76 | 76 | ||
| 77 | fcsr = c->fpu_csr31; | ||
| 77 | mask = FPU_CSR_ALL_X | FPU_CSR_ALL_E | FPU_CSR_ALL_S | FPU_CSR_RM; | 78 | mask = FPU_CSR_ALL_X | FPU_CSR_ALL_E | FPU_CSR_ALL_S | FPU_CSR_RM; |
| 78 | 79 | ||
| 79 | sr = read_c0_status(); | 80 | sr = read_c0_status(); |
| 80 | __enable_fpu(FPU_AS_IS); | 81 | __enable_fpu(FPU_AS_IS); |
| 81 | 82 | ||
| 82 | fcsr = read_32bit_cp1_register(CP1_STATUS); | ||
| 83 | |||
| 84 | fcsr0 = fcsr & mask; | 83 | fcsr0 = fcsr & mask; |
| 85 | write_32bit_cp1_register(CP1_STATUS, fcsr0); | 84 | write_32bit_cp1_register(CP1_STATUS, fcsr0); |
| 86 | fcsr0 = read_32bit_cp1_register(CP1_STATUS); | 85 | fcsr0 = read_32bit_cp1_register(CP1_STATUS); |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 51f57d841662..3c8a18a00a65 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
| @@ -109,7 +109,7 @@ void __init init_IRQ(void) | |||
| 109 | #endif | 109 | #endif |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | #ifdef DEBUG_STACKOVERFLOW | 112 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
| 113 | static inline void check_stack_overflow(void) | 113 | static inline void check_stack_overflow(void) |
| 114 | { | 114 | { |
| 115 | unsigned long sp; | 115 | unsigned long sp; |
diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c index 4b50c5787e25..d5fa3eaf39a1 100644 --- a/arch/mips/kvm/emulate.c +++ b/arch/mips/kvm/emulate.c | |||
| @@ -2409,7 +2409,7 @@ enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu, | |||
| 2409 | if (vcpu->mmio_needed == 2) | 2409 | if (vcpu->mmio_needed == 2) |
| 2410 | *gpr = *(int16_t *) run->mmio.data; | 2410 | *gpr = *(int16_t *) run->mmio.data; |
| 2411 | else | 2411 | else |
| 2412 | *gpr = *(int16_t *) run->mmio.data; | 2412 | *gpr = *(uint16_t *)run->mmio.data; |
| 2413 | 2413 | ||
| 2414 | break; | 2414 | break; |
| 2415 | case 1: | 2415 | case 1: |
diff --git a/arch/mips/loongson/loongson-3/smp.c b/arch/mips/loongson/loongson-3/smp.c index e3c68b5da18d..509877c6e9d9 100644 --- a/arch/mips/loongson/loongson-3/smp.c +++ b/arch/mips/loongson/loongson-3/smp.c | |||
| @@ -272,7 +272,7 @@ void loongson3_ipi_interrupt(struct pt_regs *regs) | |||
| 272 | if (action & SMP_ASK_C0COUNT) { | 272 | if (action & SMP_ASK_C0COUNT) { |
| 273 | BUG_ON(cpu != 0); | 273 | BUG_ON(cpu != 0); |
| 274 | c0count = read_c0_count(); | 274 | c0count = read_c0_count(); |
| 275 | for (i = 1; i < loongson_sysconf.nr_cpus; i++) | 275 | for (i = 1; i < num_possible_cpus(); i++) |
| 276 | per_cpu(core0_c0count, i) = c0count; | 276 | per_cpu(core0_c0count, i) = c0count; |
| 277 | } | 277 | } |
| 278 | } | 278 | } |
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 0dbb65a51ce5..2e03ab173591 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
| @@ -1372,7 +1372,7 @@ static int probe_scache(void) | |||
| 1372 | scache_size = addr; | 1372 | scache_size = addr; |
| 1373 | c->scache.linesz = 16 << ((config & R4K_CONF_SB) >> 22); | 1373 | c->scache.linesz = 16 << ((config & R4K_CONF_SB) >> 22); |
| 1374 | c->scache.ways = 1; | 1374 | c->scache.ways = 1; |
| 1375 | c->dcache.waybit = 0; /* does not matter */ | 1375 | c->scache.waybit = 0; /* does not matter */ |
| 1376 | 1376 | ||
| 1377 | return 1; | 1377 | return 1; |
| 1378 | } | 1378 | } |
diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c index 5d6139390bf8..e23fdf2a9c80 100644 --- a/arch/mips/net/bpf_jit.c +++ b/arch/mips/net/bpf_jit.c | |||
| @@ -681,11 +681,7 @@ static unsigned int get_stack_depth(struct jit_ctx *ctx) | |||
| 681 | sp_off += config_enabled(CONFIG_64BIT) ? | 681 | sp_off += config_enabled(CONFIG_64BIT) ? |
| 682 | (ARGS_USED_BY_JIT + 1) * RSIZE : RSIZE; | 682 | (ARGS_USED_BY_JIT + 1) * RSIZE : RSIZE; |
| 683 | 683 | ||
| 684 | /* | 684 | return sp_off; |
| 685 | * Subtract the bytes for the last registers since we only care about | ||
| 686 | * the location on the stack pointer. | ||
| 687 | */ | ||
| 688 | return sp_off - RSIZE; | ||
| 689 | } | 685 | } |
| 690 | 686 | ||
| 691 | static void build_prologue(struct jit_ctx *ctx) | 687 | static void build_prologue(struct jit_ctx *ctx) |
diff --git a/arch/mips/ralink/ill_acc.c b/arch/mips/ralink/ill_acc.c index e20b02e3ae28..e10d10b9e82a 100644 --- a/arch/mips/ralink/ill_acc.c +++ b/arch/mips/ralink/ill_acc.c | |||
| @@ -41,7 +41,7 @@ static irqreturn_t ill_acc_irq_handler(int irq, void *_priv) | |||
| 41 | addr, (type >> ILL_ACC_OFF_S) & ILL_ACC_OFF_M, | 41 | addr, (type >> ILL_ACC_OFF_S) & ILL_ACC_OFF_M, |
| 42 | type & ILL_ACC_LEN_M); | 42 | type & ILL_ACC_LEN_M); |
| 43 | 43 | ||
| 44 | rt_memc_w32(REG_ILL_ACC_TYPE, REG_ILL_ACC_TYPE); | 44 | rt_memc_w32(ILL_INT_STATUS, REG_ILL_ACC_TYPE); |
| 45 | 45 | ||
| 46 | return IRQ_HANDLED; | 46 | return IRQ_HANDLED; |
| 47 | } | 47 | } |
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/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/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/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; |
