diff options
95 files changed, 715 insertions, 339 deletions
diff --git a/Documentation/cgroups/unified-hierarchy.txt b/Documentation/cgroups/unified-hierarchy.txt index 71daa35ec2d9..eb102fb72213 100644 --- a/Documentation/cgroups/unified-hierarchy.txt +++ b/Documentation/cgroups/unified-hierarchy.txt | |||
| @@ -404,8 +404,8 @@ supported and the interface files "release_agent" and | |||
| 404 | be understood as an underflow into the highest possible value, -2 or | 404 | be understood as an underflow into the highest possible value, -2 or |
| 405 | -10M etc. do not work, so it's not consistent. | 405 | -10M etc. do not work, so it's not consistent. |
| 406 | 406 | ||
| 407 | memory.low, memory.high, and memory.max will use the string | 407 | memory.low, memory.high, and memory.max will use the string "max" to |
| 408 | "infinity" to indicate and set the highest possible value. | 408 | indicate and set the highest possible value. |
| 409 | 409 | ||
| 410 | 5. Planned Changes | 410 | 5. Planned Changes |
| 411 | 411 | ||
diff --git a/Documentation/filesystems/dlmfs.txt b/Documentation/filesystems/dlmfs.txt index 1b528b2ad809..fcf4d509d118 100644 --- a/Documentation/filesystems/dlmfs.txt +++ b/Documentation/filesystems/dlmfs.txt | |||
| @@ -5,8 +5,8 @@ system. | |||
| 5 | 5 | ||
| 6 | dlmfs is built with OCFS2 as it requires most of its infrastructure. | 6 | dlmfs is built with OCFS2 as it requires most of its infrastructure. |
| 7 | 7 | ||
| 8 | Project web page: http://oss.oracle.com/projects/ocfs2 | 8 | Project web page: http://ocfs2.wiki.kernel.org |
| 9 | Tools web page: http://oss.oracle.com/projects/ocfs2-tools | 9 | Tools web page: https://github.com/markfasheh/ocfs2-tools |
| 10 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ | 10 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ |
| 11 | 11 | ||
| 12 | All code copyright 2005 Oracle except when otherwise noted. | 12 | All code copyright 2005 Oracle except when otherwise noted. |
diff --git a/Documentation/filesystems/ocfs2.txt b/Documentation/filesystems/ocfs2.txt index 28f8c08201e2..4c49e5410595 100644 --- a/Documentation/filesystems/ocfs2.txt +++ b/Documentation/filesystems/ocfs2.txt | |||
| @@ -8,8 +8,8 @@ also make it attractive for non-clustered use. | |||
| 8 | You'll want to install the ocfs2-tools package in order to at least | 8 | You'll want to install the ocfs2-tools package in order to at least |
| 9 | get "mount.ocfs2" and "ocfs2_hb_ctl". | 9 | get "mount.ocfs2" and "ocfs2_hb_ctl". |
| 10 | 10 | ||
| 11 | Project web page: http://oss.oracle.com/projects/ocfs2 | 11 | Project web page: http://ocfs2.wiki.kernel.org |
| 12 | Tools web page: http://oss.oracle.com/projects/ocfs2-tools | 12 | Tools git tree: https://github.com/markfasheh/ocfs2-tools |
| 13 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ | 13 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ |
| 14 | 14 | ||
| 15 | All code copyright 2005 Oracle except when otherwise noted. | 15 | All code copyright 2005 Oracle except when otherwise noted. |
diff --git a/MAINTAINERS b/MAINTAINERS index ddc5a8cf9a8a..eaf999638a65 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -7213,8 +7213,7 @@ ORACLE CLUSTER FILESYSTEM 2 (OCFS2) | |||
| 7213 | M: Mark Fasheh <mfasheh@suse.com> | 7213 | M: Mark Fasheh <mfasheh@suse.com> |
| 7214 | M: Joel Becker <jlbec@evilplan.org> | 7214 | M: Joel Becker <jlbec@evilplan.org> |
| 7215 | L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) | 7215 | L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) |
| 7216 | W: http://oss.oracle.com/projects/ocfs2/ | 7216 | W: http://ocfs2.wiki.kernel.org |
| 7217 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git | ||
| 7218 | S: Supported | 7217 | S: Supported |
| 7219 | F: Documentation/filesystems/ocfs2.txt | 7218 | F: Documentation/filesystems/ocfs2.txt |
| 7220 | F: Documentation/filesystems/dlmfs.txt | 7219 | F: Documentation/filesystems/dlmfs.txt |
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi index 6cc25ed912ee..2c6248d9a9ef 100644 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi | |||
| @@ -195,6 +195,7 @@ | |||
| 195 | 195 | ||
| 196 | &usb0 { | 196 | &usb0 { |
| 197 | status = "okay"; | 197 | status = "okay"; |
| 198 | dr_mode = "peripheral"; | ||
| 198 | }; | 199 | }; |
| 199 | 200 | ||
| 200 | &usb1 { | 201 | &usb1 { |
diff --git a/arch/arm/boot/dts/am437x-idk-evm.dts b/arch/arm/boot/dts/am437x-idk-evm.dts index f9a17e2ca8cb..0198f5a62b96 100644 --- a/arch/arm/boot/dts/am437x-idk-evm.dts +++ b/arch/arm/boot/dts/am437x-idk-evm.dts | |||
| @@ -133,20 +133,6 @@ | |||
| 133 | >; | 133 | >; |
| 134 | }; | 134 | }; |
| 135 | 135 | ||
| 136 | i2c1_pins_default: i2c1_pins_default { | ||
| 137 | pinctrl-single,pins = < | ||
| 138 | 0x15c (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_cs0.i2c1_scl */ | ||
| 139 | 0x158 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_d1.i2c1_sda */ | ||
| 140 | >; | ||
| 141 | }; | ||
| 142 | |||
| 143 | i2c1_pins_sleep: i2c1_pins_sleep { | ||
| 144 | pinctrl-single,pins = < | ||
| 145 | 0x15c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_cs0.i2c1_scl */ | ||
| 146 | 0x158 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_d1.i2c1_sda */ | ||
| 147 | >; | ||
| 148 | }; | ||
| 149 | |||
| 150 | mmc1_pins_default: pinmux_mmc1_pins_default { | 136 | mmc1_pins_default: pinmux_mmc1_pins_default { |
| 151 | pinctrl-single,pins = < | 137 | pinctrl-single,pins = < |
| 152 | 0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */ | 138 | 0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */ |
| @@ -254,7 +240,7 @@ | |||
| 254 | status = "okay"; | 240 | status = "okay"; |
| 255 | pinctrl-names = "default", "sleep"; | 241 | pinctrl-names = "default", "sleep"; |
| 256 | pinctrl-0 = <&i2c0_pins_default>; | 242 | pinctrl-0 = <&i2c0_pins_default>; |
| 257 | pinctrl-1 = <&i2c0_pins_default>; | 243 | pinctrl-1 = <&i2c0_pins_sleep>; |
| 258 | clock-frequency = <400000>; | 244 | clock-frequency = <400000>; |
| 259 | 245 | ||
| 260 | at24@50 { | 246 | at24@50 { |
| @@ -262,17 +248,10 @@ | |||
| 262 | pagesize = <64>; | 248 | pagesize = <64>; |
| 263 | reg = <0x50>; | 249 | reg = <0x50>; |
| 264 | }; | 250 | }; |
| 265 | }; | ||
| 266 | |||
| 267 | &i2c1 { | ||
| 268 | status = "okay"; | ||
| 269 | pinctrl-names = "default", "sleep"; | ||
| 270 | pinctrl-0 = <&i2c1_pins_default>; | ||
| 271 | pinctrl-1 = <&i2c1_pins_default>; | ||
| 272 | clock-frequency = <400000>; | ||
| 273 | 251 | ||
| 274 | tps: tps62362@60 { | 252 | tps: tps62362@60 { |
| 275 | compatible = "ti,tps62362"; | 253 | compatible = "ti,tps62362"; |
| 254 | reg = <0x60>; | ||
| 276 | regulator-name = "VDD_MPU"; | 255 | regulator-name = "VDD_MPU"; |
| 277 | regulator-min-microvolt = <950000>; | 256 | regulator-min-microvolt = <950000>; |
| 278 | regulator-max-microvolt = <1330000>; | 257 | regulator-max-microvolt = <1330000>; |
diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts index 03750af3b49a..6463f9ef2b54 100644 --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts | |||
| @@ -549,14 +549,6 @@ | |||
| 549 | pinctrl-0 = <&usb1_pins>; | 549 | pinctrl-0 = <&usb1_pins>; |
| 550 | }; | 550 | }; |
| 551 | 551 | ||
| 552 | &omap_dwc3_1 { | ||
| 553 | extcon = <&extcon_usb1>; | ||
| 554 | }; | ||
| 555 | |||
| 556 | &omap_dwc3_2 { | ||
| 557 | extcon = <&extcon_usb2>; | ||
| 558 | }; | ||
| 559 | |||
| 560 | &usb2 { | 552 | &usb2 { |
| 561 | dr_mode = "peripheral"; | 553 | dr_mode = "peripheral"; |
| 562 | }; | 554 | }; |
diff --git a/arch/arm/boot/dts/dm8168-evm.dts b/arch/arm/boot/dts/dm8168-evm.dts index 857d0289ad4d..d3a29c1b8417 100644 --- a/arch/arm/boot/dts/dm8168-evm.dts +++ b/arch/arm/boot/dts/dm8168-evm.dts | |||
| @@ -35,6 +35,18 @@ | |||
| 35 | DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */ | 35 | DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */ |
| 36 | >; | 36 | >; |
| 37 | }; | 37 | }; |
| 38 | |||
| 39 | usb0_pins: pinmux_usb0_pins { | ||
| 40 | pinctrl-single,pins = < | ||
| 41 | DM816X_IOPAD(0x0d00, MUX_MODE0) /* USB0_DRVVBUS */ | ||
| 42 | >; | ||
| 43 | }; | ||
| 44 | |||
| 45 | usb1_pins: pinmux_usb0_pins { | ||
| 46 | pinctrl-single,pins = < | ||
| 47 | DM816X_IOPAD(0x0d04, MUX_MODE0) /* USB1_DRVVBUS */ | ||
| 48 | >; | ||
| 49 | }; | ||
| 38 | }; | 50 | }; |
| 39 | 51 | ||
| 40 | &i2c1 { | 52 | &i2c1 { |
| @@ -127,3 +139,16 @@ | |||
| 127 | &mmc1 { | 139 | &mmc1 { |
| 128 | vmmc-supply = <&vmmcsd_fixed>; | 140 | vmmc-supply = <&vmmcsd_fixed>; |
| 129 | }; | 141 | }; |
| 142 | |||
| 143 | /* At least dm8168-evm rev c won't support multipoint, later may */ | ||
| 144 | &usb0 { | ||
| 145 | pinctrl-names = "default"; | ||
| 146 | pinctrl-0 = <&usb0_pins>; | ||
| 147 | mentor,multipoint = <0>; | ||
| 148 | }; | ||
| 149 | |||
| 150 | &usb1 { | ||
| 151 | pinctrl-names = "default"; | ||
| 152 | pinctrl-0 = <&usb1_pins>; | ||
| 153 | mentor,multipoint = <0>; | ||
| 154 | }; | ||
diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi index d98d0f7de380..3c97b5f2addc 100644 --- a/arch/arm/boot/dts/dm816x.dtsi +++ b/arch/arm/boot/dts/dm816x.dtsi | |||
| @@ -97,10 +97,31 @@ | |||
| 97 | 97 | ||
| 98 | /* Device Configuration Registers */ | 98 | /* Device Configuration Registers */ |
| 99 | scm_conf: syscon@600 { | 99 | scm_conf: syscon@600 { |
| 100 | compatible = "syscon"; | 100 | compatible = "syscon", "simple-bus"; |
| 101 | reg = <0x600 0x110>; | 101 | reg = <0x600 0x110>; |
| 102 | #address-cells = <1>; | 102 | #address-cells = <1>; |
| 103 | #size-cells = <1>; | 103 | #size-cells = <1>; |
| 104 | ranges = <0 0x600 0x110>; | ||
| 105 | |||
| 106 | usb_phy0: usb-phy@20 { | ||
| 107 | compatible = "ti,dm8168-usb-phy"; | ||
| 108 | reg = <0x20 0x8>; | ||
| 109 | reg-names = "phy"; | ||
| 110 | clocks = <&main_fapll 6>; | ||
| 111 | clock-names = "refclk"; | ||
| 112 | #phy-cells = <0>; | ||
| 113 | syscon = <&scm_conf>; | ||
| 114 | }; | ||
| 115 | |||
| 116 | usb_phy1: usb-phy@28 { | ||
| 117 | compatible = "ti,dm8168-usb-phy"; | ||
| 118 | reg = <0x28 0x8>; | ||
| 119 | reg-names = "phy"; | ||
| 120 | clocks = <&main_fapll 6>; | ||
| 121 | clock-names = "refclk"; | ||
| 122 | #phy-cells = <0>; | ||
| 123 | syscon = <&scm_conf>; | ||
| 124 | }; | ||
| 104 | }; | 125 | }; |
| 105 | 126 | ||
| 106 | scrm_clocks: clocks { | 127 | scrm_clocks: clocks { |
| @@ -357,7 +378,10 @@ | |||
| 357 | reg-names = "mc", "control"; | 378 | reg-names = "mc", "control"; |
| 358 | interrupts = <18>; | 379 | interrupts = <18>; |
| 359 | interrupt-names = "mc"; | 380 | interrupt-names = "mc"; |
| 360 | dr_mode = "otg"; | 381 | dr_mode = "host"; |
| 382 | interface-type = <0>; | ||
| 383 | phys = <&usb_phy0>; | ||
| 384 | phy-names = "usb2-phy"; | ||
| 361 | mentor,multipoint = <1>; | 385 | mentor,multipoint = <1>; |
| 362 | mentor,num-eps = <16>; | 386 | mentor,num-eps = <16>; |
| 363 | mentor,ram-bits = <12>; | 387 | mentor,ram-bits = <12>; |
| @@ -366,13 +390,15 @@ | |||
| 366 | 390 | ||
| 367 | usb1: usb@47401800 { | 391 | usb1: usb@47401800 { |
| 368 | compatible = "ti,musb-am33xx"; | 392 | compatible = "ti,musb-am33xx"; |
| 369 | status = "disabled"; | ||
| 370 | reg = <0x47401c00 0x400 | 393 | reg = <0x47401c00 0x400 |
| 371 | 0x47401800 0x200>; | 394 | 0x47401800 0x200>; |
| 372 | reg-names = "mc", "control"; | 395 | reg-names = "mc", "control"; |
| 373 | interrupts = <19>; | 396 | interrupts = <19>; |
| 374 | interrupt-names = "mc"; | 397 | interrupt-names = "mc"; |
| 375 | dr_mode = "otg"; | 398 | dr_mode = "host"; |
| 399 | interface-type = <0>; | ||
| 400 | phys = <&usb_phy1>; | ||
| 401 | phy-names = "usb2-phy"; | ||
| 376 | mentor,multipoint = <1>; | 402 | mentor,multipoint = <1>; |
| 377 | mentor,num-eps = <16>; | 403 | mentor,num-eps = <16>; |
| 378 | mentor,ram-bits = <12>; | 404 | mentor,ram-bits = <12>; |
diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index 746cddb1b8f5..3290a96ba586 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts | |||
| @@ -543,14 +543,6 @@ | |||
| 543 | }; | 543 | }; |
| 544 | }; | 544 | }; |
| 545 | 545 | ||
| 546 | &omap_dwc3_1 { | ||
| 547 | extcon = <&extcon_usb1>; | ||
| 548 | }; | ||
| 549 | |||
| 550 | &omap_dwc3_2 { | ||
| 551 | extcon = <&extcon_usb2>; | ||
| 552 | }; | ||
| 553 | |||
| 554 | &usb1 { | 546 | &usb1 { |
| 555 | dr_mode = "peripheral"; | 547 | dr_mode = "peripheral"; |
| 556 | pinctrl-names = "default"; | 548 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index 5827fedafd43..127608d79033 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi | |||
| @@ -249,8 +249,8 @@ | |||
| 249 | <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, | 249 | <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, |
| 250 | <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; | 250 | <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; |
| 251 | #dma-cells = <1>; | 251 | #dma-cells = <1>; |
| 252 | #dma-channels = <32>; | 252 | dma-channels = <32>; |
| 253 | #dma-requests = <127>; | 253 | dma-requests = <127>; |
| 254 | }; | 254 | }; |
| 255 | 255 | ||
| 256 | gpio1: gpio@4ae10000 { | 256 | gpio1: gpio@4ae10000 { |
| @@ -1090,8 +1090,8 @@ | |||
| 1090 | <0x4A096800 0x40>; /* pll_ctrl */ | 1090 | <0x4A096800 0x40>; /* pll_ctrl */ |
| 1091 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | 1091 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; |
| 1092 | ctrl-module = <&omap_control_sata>; | 1092 | ctrl-module = <&omap_control_sata>; |
| 1093 | clocks = <&sys_clkin1>; | 1093 | clocks = <&sys_clkin1>, <&sata_ref_clk>; |
| 1094 | clock-names = "sysclk"; | 1094 | clock-names = "sysclk", "refclk"; |
| 1095 | #phy-cells = <0>; | 1095 | #phy-cells = <0>; |
| 1096 | }; | 1096 | }; |
| 1097 | 1097 | ||
diff --git a/arch/arm/boot/dts/dra72-evm.dts b/arch/arm/boot/dts/dra72-evm.dts index 4d8711713610..e0264d0bf7b9 100644 --- a/arch/arm/boot/dts/dra72-evm.dts +++ b/arch/arm/boot/dts/dra72-evm.dts | |||
| @@ -380,14 +380,6 @@ | |||
| 380 | phy-supply = <&ldo4_reg>; | 380 | phy-supply = <&ldo4_reg>; |
| 381 | }; | 381 | }; |
| 382 | 382 | ||
| 383 | &omap_dwc3_1 { | ||
| 384 | extcon = <&extcon_usb1>; | ||
| 385 | }; | ||
| 386 | |||
| 387 | &omap_dwc3_2 { | ||
| 388 | extcon = <&extcon_usb2>; | ||
| 389 | }; | ||
| 390 | |||
| 391 | &usb1 { | 383 | &usb1 { |
| 392 | dr_mode = "peripheral"; | 384 | dr_mode = "peripheral"; |
| 393 | pinctrl-names = "default"; | 385 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/omap2.dtsi b/arch/arm/boot/dts/omap2.dtsi index 59d1c297bb30..578fa2a54dce 100644 --- a/arch/arm/boot/dts/omap2.dtsi +++ b/arch/arm/boot/dts/omap2.dtsi | |||
| @@ -87,8 +87,8 @@ | |||
| 87 | <14>, | 87 | <14>, |
| 88 | <15>; | 88 | <15>; |
| 89 | #dma-cells = <1>; | 89 | #dma-cells = <1>; |
| 90 | #dma-channels = <32>; | 90 | dma-channels = <32>; |
| 91 | #dma-requests = <64>; | 91 | dma-requests = <64>; |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | i2c1: i2c@48070000 { | 94 | i2c1: i2c@48070000 { |
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index 60403273f83e..db80f9d376fa 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts | |||
| @@ -16,6 +16,13 @@ | |||
| 16 | model = "Nokia N900"; | 16 | model = "Nokia N900"; |
| 17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; | 17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; |
| 18 | 18 | ||
| 19 | aliases { | ||
| 20 | i2c0; | ||
| 21 | i2c1 = &i2c1; | ||
| 22 | i2c2 = &i2c2; | ||
| 23 | i2c3 = &i2c3; | ||
| 24 | }; | ||
| 25 | |||
| 19 | cpus { | 26 | cpus { |
| 20 | cpu@0 { | 27 | cpu@0 { |
| 21 | cpu0-supply = <&vcc>; | 28 | cpu0-supply = <&vcc>; |
| @@ -704,7 +711,7 @@ | |||
| 704 | compatible = "smsc,lan91c94"; | 711 | compatible = "smsc,lan91c94"; |
| 705 | interrupt-parent = <&gpio2>; | 712 | interrupt-parent = <&gpio2>; |
| 706 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ | 713 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ |
| 707 | reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */ | 714 | reg = <1 0 0xf>; /* 16 byte IO range */ |
| 708 | bank-width = <2>; | 715 | bank-width = <2>; |
| 709 | pinctrl-names = "default"; | 716 | pinctrl-names = "default"; |
| 710 | pinctrl-0 = <ðernet_pins>; | 717 | pinctrl-0 = <ðernet_pins>; |
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 01b71111bd55..f4f78c40b564 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
| @@ -155,8 +155,8 @@ | |||
| 155 | <14>, | 155 | <14>, |
| 156 | <15>; | 156 | <15>; |
| 157 | #dma-cells = <1>; | 157 | #dma-cells = <1>; |
| 158 | #dma-channels = <32>; | 158 | dma-channels = <32>; |
| 159 | #dma-requests = <96>; | 159 | dma-requests = <96>; |
| 160 | }; | 160 | }; |
| 161 | 161 | ||
| 162 | omap3_pmx_core: pinmux@48002030 { | 162 | omap3_pmx_core: pinmux@48002030 { |
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 074147cebae4..87401d9f4d8b 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
| @@ -223,8 +223,8 @@ | |||
| 223 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, | 223 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, |
| 224 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; | 224 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; |
| 225 | #dma-cells = <1>; | 225 | #dma-cells = <1>; |
| 226 | #dma-channels = <32>; | 226 | dma-channels = <32>; |
| 227 | #dma-requests = <127>; | 227 | dma-requests = <127>; |
| 228 | }; | 228 | }; |
| 229 | 229 | ||
| 230 | gpio1: gpio@4a310000 { | 230 | gpio1: gpio@4a310000 { |
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index b321fdf42c9f..ddff674bd05e 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
| @@ -238,8 +238,8 @@ | |||
| 238 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, | 238 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, |
| 239 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; | 239 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; |
| 240 | #dma-cells = <1>; | 240 | #dma-cells = <1>; |
| 241 | #dma-channels = <32>; | 241 | dma-channels = <32>; |
| 242 | #dma-requests = <127>; | 242 | dma-requests = <127>; |
| 243 | }; | 243 | }; |
| 244 | 244 | ||
| 245 | gpio1: gpio@4ae10000 { | 245 | gpio1: gpio@4ae10000 { |
| @@ -929,8 +929,8 @@ | |||
| 929 | <0x4A096800 0x40>; /* pll_ctrl */ | 929 | <0x4A096800 0x40>; /* pll_ctrl */ |
| 930 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | 930 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; |
| 931 | ctrl-module = <&omap_control_sata>; | 931 | ctrl-module = <&omap_control_sata>; |
| 932 | clocks = <&sys_clkin>; | 932 | clocks = <&sys_clkin>, <&sata_ref_clk>; |
| 933 | clock-names = "sysclk"; | 933 | clock-names = "sysclk", "refclk"; |
| 934 | #phy-cells = <0>; | 934 | #phy-cells = <0>; |
| 935 | }; | 935 | }; |
| 936 | }; | 936 | }; |
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index e8a4c955241b..b7e6b6fba5e0 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig | |||
| @@ -62,6 +62,17 @@ CONFIG_MACH_SPEAR1340=y | |||
| 62 | CONFIG_ARCH_STI=y | 62 | CONFIG_ARCH_STI=y |
| 63 | CONFIG_ARCH_EXYNOS=y | 63 | CONFIG_ARCH_EXYNOS=y |
| 64 | CONFIG_EXYNOS5420_MCPM=y | 64 | CONFIG_EXYNOS5420_MCPM=y |
| 65 | CONFIG_ARCH_SHMOBILE_MULTI=y | ||
| 66 | CONFIG_ARCH_EMEV2=y | ||
| 67 | CONFIG_ARCH_R7S72100=y | ||
| 68 | CONFIG_ARCH_R8A73A4=y | ||
| 69 | CONFIG_ARCH_R8A7740=y | ||
| 70 | CONFIG_ARCH_R8A7779=y | ||
| 71 | CONFIG_ARCH_R8A7790=y | ||
| 72 | CONFIG_ARCH_R8A7791=y | ||
| 73 | CONFIG_ARCH_R8A7794=y | ||
| 74 | CONFIG_ARCH_SH73A0=y | ||
| 75 | CONFIG_MACH_MARZEN=y | ||
| 65 | CONFIG_ARCH_SUNXI=y | 76 | CONFIG_ARCH_SUNXI=y |
| 66 | CONFIG_ARCH_SIRF=y | 77 | CONFIG_ARCH_SIRF=y |
| 67 | CONFIG_ARCH_TEGRA=y | 78 | CONFIG_ARCH_TEGRA=y |
| @@ -84,6 +95,8 @@ CONFIG_PCI_KEYSTONE=y | |||
| 84 | CONFIG_PCI_MSI=y | 95 | CONFIG_PCI_MSI=y |
| 85 | CONFIG_PCI_MVEBU=y | 96 | CONFIG_PCI_MVEBU=y |
| 86 | CONFIG_PCI_TEGRA=y | 97 | CONFIG_PCI_TEGRA=y |
| 98 | CONFIG_PCI_RCAR_GEN2=y | ||
| 99 | CONFIG_PCI_RCAR_GEN2_PCIE=y | ||
| 87 | CONFIG_PCIEPORTBUS=y | 100 | CONFIG_PCIEPORTBUS=y |
| 88 | CONFIG_SMP=y | 101 | CONFIG_SMP=y |
| 89 | CONFIG_NR_CPUS=8 | 102 | CONFIG_NR_CPUS=8 |
| @@ -130,6 +143,7 @@ CONFIG_DEVTMPFS_MOUNT=y | |||
| 130 | CONFIG_DMA_CMA=y | 143 | CONFIG_DMA_CMA=y |
| 131 | CONFIG_CMA_SIZE_MBYTES=64 | 144 | CONFIG_CMA_SIZE_MBYTES=64 |
| 132 | CONFIG_OMAP_OCP2SCP=y | 145 | CONFIG_OMAP_OCP2SCP=y |
| 146 | CONFIG_SIMPLE_PM_BUS=y | ||
| 133 | CONFIG_MTD=y | 147 | CONFIG_MTD=y |
| 134 | CONFIG_MTD_CMDLINE_PARTS=y | 148 | CONFIG_MTD_CMDLINE_PARTS=y |
| 135 | CONFIG_MTD_BLOCK=y | 149 | CONFIG_MTD_BLOCK=y |
| @@ -157,6 +171,7 @@ CONFIG_AHCI_SUNXI=y | |||
| 157 | CONFIG_AHCI_TEGRA=y | 171 | CONFIG_AHCI_TEGRA=y |
| 158 | CONFIG_SATA_HIGHBANK=y | 172 | CONFIG_SATA_HIGHBANK=y |
| 159 | CONFIG_SATA_MV=y | 173 | CONFIG_SATA_MV=y |
| 174 | CONFIG_SATA_RCAR=y | ||
| 160 | CONFIG_NETDEVICES=y | 175 | CONFIG_NETDEVICES=y |
| 161 | CONFIG_HIX5HD2_GMAC=y | 176 | CONFIG_HIX5HD2_GMAC=y |
| 162 | CONFIG_SUN4I_EMAC=y | 177 | CONFIG_SUN4I_EMAC=y |
| @@ -167,14 +182,17 @@ CONFIG_MV643XX_ETH=y | |||
| 167 | CONFIG_MVNETA=y | 182 | CONFIG_MVNETA=y |
| 168 | CONFIG_KS8851=y | 183 | CONFIG_KS8851=y |
| 169 | CONFIG_R8169=y | 184 | CONFIG_R8169=y |
| 185 | CONFIG_SH_ETH=y | ||
| 170 | CONFIG_SMSC911X=y | 186 | CONFIG_SMSC911X=y |
| 171 | CONFIG_STMMAC_ETH=y | 187 | CONFIG_STMMAC_ETH=y |
| 172 | CONFIG_TI_CPSW=y | 188 | CONFIG_TI_CPSW=y |
| 173 | CONFIG_XILINX_EMACLITE=y | 189 | CONFIG_XILINX_EMACLITE=y |
| 174 | CONFIG_AT803X_PHY=y | 190 | CONFIG_AT803X_PHY=y |
| 175 | CONFIG_MARVELL_PHY=y | 191 | CONFIG_MARVELL_PHY=y |
| 192 | CONFIG_SMSC_PHY=y | ||
| 176 | CONFIG_BROADCOM_PHY=y | 193 | CONFIG_BROADCOM_PHY=y |
| 177 | CONFIG_ICPLUS_PHY=y | 194 | CONFIG_ICPLUS_PHY=y |
| 195 | CONFIG_MICREL_PHY=y | ||
| 178 | CONFIG_USB_PEGASUS=y | 196 | CONFIG_USB_PEGASUS=y |
| 179 | CONFIG_USB_USBNET=y | 197 | CONFIG_USB_USBNET=y |
| 180 | CONFIG_USB_NET_SMSC75XX=y | 198 | CONFIG_USB_NET_SMSC75XX=y |
| @@ -192,15 +210,18 @@ CONFIG_KEYBOARD_CROS_EC=y | |||
| 192 | CONFIG_MOUSE_PS2_ELANTECH=y | 210 | CONFIG_MOUSE_PS2_ELANTECH=y |
| 193 | CONFIG_INPUT_TOUCHSCREEN=y | 211 | CONFIG_INPUT_TOUCHSCREEN=y |
| 194 | CONFIG_TOUCHSCREEN_ATMEL_MXT=y | 212 | CONFIG_TOUCHSCREEN_ATMEL_MXT=y |
| 213 | CONFIG_TOUCHSCREEN_ST1232=m | ||
| 195 | CONFIG_TOUCHSCREEN_STMPE=y | 214 | CONFIG_TOUCHSCREEN_STMPE=y |
| 196 | CONFIG_TOUCHSCREEN_SUN4I=y | 215 | CONFIG_TOUCHSCREEN_SUN4I=y |
| 197 | CONFIG_INPUT_MISC=y | 216 | CONFIG_INPUT_MISC=y |
| 198 | CONFIG_INPUT_MPU3050=y | 217 | CONFIG_INPUT_MPU3050=y |
| 199 | CONFIG_INPUT_AXP20X_PEK=y | 218 | CONFIG_INPUT_AXP20X_PEK=y |
| 219 | CONFIG_INPUT_ADXL34X=m | ||
| 200 | CONFIG_SERIO_AMBAKMI=y | 220 | CONFIG_SERIO_AMBAKMI=y |
| 201 | CONFIG_SERIAL_8250=y | 221 | CONFIG_SERIAL_8250=y |
| 202 | CONFIG_SERIAL_8250_CONSOLE=y | 222 | CONFIG_SERIAL_8250_CONSOLE=y |
| 203 | CONFIG_SERIAL_8250_DW=y | 223 | CONFIG_SERIAL_8250_DW=y |
| 224 | CONFIG_SERIAL_8250_EM=y | ||
| 204 | CONFIG_SERIAL_8250_MT6577=y | 225 | CONFIG_SERIAL_8250_MT6577=y |
| 205 | CONFIG_SERIAL_AMBA_PL011=y | 226 | CONFIG_SERIAL_AMBA_PL011=y |
| 206 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | 227 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y |
| @@ -213,6 +234,9 @@ CONFIG_SERIAL_SIRFSOC_CONSOLE=y | |||
| 213 | CONFIG_SERIAL_TEGRA=y | 234 | CONFIG_SERIAL_TEGRA=y |
| 214 | CONFIG_SERIAL_IMX=y | 235 | CONFIG_SERIAL_IMX=y |
| 215 | CONFIG_SERIAL_IMX_CONSOLE=y | 236 | CONFIG_SERIAL_IMX_CONSOLE=y |
| 237 | CONFIG_SERIAL_SH_SCI=y | ||
| 238 | CONFIG_SERIAL_SH_SCI_NR_UARTS=20 | ||
| 239 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | ||
| 216 | CONFIG_SERIAL_MSM=y | 240 | CONFIG_SERIAL_MSM=y |
| 217 | CONFIG_SERIAL_MSM_CONSOLE=y | 241 | CONFIG_SERIAL_MSM_CONSOLE=y |
| 218 | CONFIG_SERIAL_VT8500=y | 242 | CONFIG_SERIAL_VT8500=y |
| @@ -233,19 +257,26 @@ CONFIG_I2C_MUX_PCA954x=y | |||
| 233 | CONFIG_I2C_MUX_PINCTRL=y | 257 | CONFIG_I2C_MUX_PINCTRL=y |
| 234 | CONFIG_I2C_CADENCE=y | 258 | CONFIG_I2C_CADENCE=y |
| 235 | CONFIG_I2C_DESIGNWARE_PLATFORM=y | 259 | CONFIG_I2C_DESIGNWARE_PLATFORM=y |
| 260 | CONFIG_I2C_GPIO=m | ||
| 236 | CONFIG_I2C_EXYNOS5=y | 261 | CONFIG_I2C_EXYNOS5=y |
| 237 | CONFIG_I2C_MV64XXX=y | 262 | CONFIG_I2C_MV64XXX=y |
| 263 | CONFIG_I2C_RIIC=y | ||
| 238 | CONFIG_I2C_S3C2410=y | 264 | CONFIG_I2C_S3C2410=y |
| 265 | CONFIG_I2C_SH_MOBILE=y | ||
| 239 | CONFIG_I2C_SIRF=y | 266 | CONFIG_I2C_SIRF=y |
| 240 | CONFIG_I2C_TEGRA=y | ||
| 241 | CONFIG_I2C_ST=y | 267 | CONFIG_I2C_ST=y |
| 242 | CONFIG_SPI=y | 268 | CONFIG_I2C_TEGRA=y |
| 243 | CONFIG_I2C_XILINX=y | 269 | CONFIG_I2C_XILINX=y |
| 244 | CONFIG_SPI_DAVINCI=y | 270 | CONFIG_I2C_RCAR=y |
| 271 | CONFIG_SPI=y | ||
| 245 | CONFIG_SPI_CADENCE=y | 272 | CONFIG_SPI_CADENCE=y |
| 273 | CONFIG_SPI_DAVINCI=y | ||
| 246 | CONFIG_SPI_OMAP24XX=y | 274 | CONFIG_SPI_OMAP24XX=y |
| 247 | CONFIG_SPI_ORION=y | 275 | CONFIG_SPI_ORION=y |
| 248 | CONFIG_SPI_PL022=y | 276 | CONFIG_SPI_PL022=y |
| 277 | CONFIG_SPI_RSPI=y | ||
| 278 | CONFIG_SPI_SH_MSIOF=m | ||
| 279 | CONFIG_SPI_SH_HSPI=y | ||
| 249 | CONFIG_SPI_SIRF=y | 280 | CONFIG_SPI_SIRF=y |
| 250 | CONFIG_SPI_SUN4I=y | 281 | CONFIG_SPI_SUN4I=y |
| 251 | CONFIG_SPI_SUN6I=y | 282 | CONFIG_SPI_SUN6I=y |
| @@ -259,12 +290,15 @@ CONFIG_PINCTRL_PALMAS=y | |||
| 259 | CONFIG_PINCTRL_APQ8084=y | 290 | CONFIG_PINCTRL_APQ8084=y |
| 260 | CONFIG_GPIO_SYSFS=y | 291 | CONFIG_GPIO_SYSFS=y |
| 261 | CONFIG_GPIO_GENERIC_PLATFORM=y | 292 | CONFIG_GPIO_GENERIC_PLATFORM=y |
| 262 | CONFIG_GPIO_DWAPB=y | ||
| 263 | CONFIG_GPIO_DAVINCI=y | 293 | CONFIG_GPIO_DAVINCI=y |
| 294 | CONFIG_GPIO_DWAPB=y | ||
| 295 | CONFIG_GPIO_EM=y | ||
| 296 | CONFIG_GPIO_RCAR=y | ||
| 264 | CONFIG_GPIO_XILINX=y | 297 | CONFIG_GPIO_XILINX=y |
| 265 | CONFIG_GPIO_ZYNQ=y | 298 | CONFIG_GPIO_ZYNQ=y |
| 266 | CONFIG_GPIO_PCA953X=y | 299 | CONFIG_GPIO_PCA953X=y |
| 267 | CONFIG_GPIO_PCA953X_IRQ=y | 300 | CONFIG_GPIO_PCA953X_IRQ=y |
| 301 | CONFIG_GPIO_PCF857X=y | ||
| 268 | CONFIG_GPIO_TWL4030=y | 302 | CONFIG_GPIO_TWL4030=y |
| 269 | CONFIG_GPIO_PALMAS=y | 303 | CONFIG_GPIO_PALMAS=y |
| 270 | CONFIG_GPIO_SYSCON=y | 304 | CONFIG_GPIO_SYSCON=y |
| @@ -276,10 +310,12 @@ CONFIG_POWER_RESET_AS3722=y | |||
| 276 | CONFIG_POWER_RESET_GPIO=y | 310 | CONFIG_POWER_RESET_GPIO=y |
| 277 | CONFIG_POWER_RESET_KEYSTONE=y | 311 | CONFIG_POWER_RESET_KEYSTONE=y |
| 278 | CONFIG_POWER_RESET_SUN6I=y | 312 | CONFIG_POWER_RESET_SUN6I=y |
| 313 | CONFIG_POWER_RESET_RMOBILE=y | ||
| 279 | CONFIG_SENSORS_LM90=y | 314 | CONFIG_SENSORS_LM90=y |
| 280 | CONFIG_SENSORS_LM95245=y | 315 | CONFIG_SENSORS_LM95245=y |
| 281 | CONFIG_THERMAL=y | 316 | CONFIG_THERMAL=y |
| 282 | CONFIG_CPU_THERMAL=y | 317 | CONFIG_CPU_THERMAL=y |
| 318 | CONFIG_RCAR_THERMAL=y | ||
| 283 | CONFIG_ARMADA_THERMAL=y | 319 | CONFIG_ARMADA_THERMAL=y |
| 284 | CONFIG_DAVINCI_WATCHDOG | 320 | CONFIG_DAVINCI_WATCHDOG |
| 285 | CONFIG_ST_THERMAL_SYSCFG=y | 321 | CONFIG_ST_THERMAL_SYSCFG=y |
| @@ -290,6 +326,7 @@ CONFIG_ARM_SP805_WATCHDOG=y | |||
| 290 | CONFIG_ORION_WATCHDOG=y | 326 | CONFIG_ORION_WATCHDOG=y |
| 291 | CONFIG_SUNXI_WATCHDOG=y | 327 | CONFIG_SUNXI_WATCHDOG=y |
| 292 | CONFIG_MESON_WATCHDOG=y | 328 | CONFIG_MESON_WATCHDOG=y |
| 329 | CONFIG_MFD_AS3711=y | ||
| 293 | CONFIG_MFD_AS3722=y | 330 | CONFIG_MFD_AS3722=y |
| 294 | CONFIG_MFD_BCM590XX=y | 331 | CONFIG_MFD_BCM590XX=y |
| 295 | CONFIG_MFD_AXP20X=y | 332 | CONFIG_MFD_AXP20X=y |
| @@ -304,13 +341,16 @@ CONFIG_MFD_TPS65090=y | |||
| 304 | CONFIG_MFD_TPS6586X=y | 341 | CONFIG_MFD_TPS6586X=y |
| 305 | CONFIG_MFD_TPS65910=y | 342 | CONFIG_MFD_TPS65910=y |
| 306 | CONFIG_REGULATOR_AB8500=y | 343 | CONFIG_REGULATOR_AB8500=y |
| 344 | CONFIG_REGULATOR_AS3711=y | ||
| 307 | CONFIG_REGULATOR_AS3722=y | 345 | CONFIG_REGULATOR_AS3722=y |
| 308 | CONFIG_REGULATOR_AXP20X=y | 346 | CONFIG_REGULATOR_AXP20X=y |
| 309 | CONFIG_REGULATOR_BCM590XX=y | 347 | CONFIG_REGULATOR_BCM590XX=y |
| 348 | CONFIG_REGULATOR_DA9210=y | ||
| 310 | CONFIG_REGULATOR_GPIO=y | 349 | CONFIG_REGULATOR_GPIO=y |
| 311 | CONFIG_MFD_SYSCON=y | 350 | CONFIG_MFD_SYSCON=y |
| 312 | CONFIG_POWER_RESET_SYSCON=y | 351 | CONFIG_POWER_RESET_SYSCON=y |
| 313 | CONFIG_REGULATOR_MAX8907=y | 352 | CONFIG_REGULATOR_MAX8907=y |
| 353 | CONFIG_REGULATOR_MAX8973=y | ||
| 314 | CONFIG_REGULATOR_MAX77686=y | 354 | CONFIG_REGULATOR_MAX77686=y |
| 315 | CONFIG_REGULATOR_PALMAS=y | 355 | CONFIG_REGULATOR_PALMAS=y |
| 316 | CONFIG_REGULATOR_S2MPS11=y | 356 | CONFIG_REGULATOR_S2MPS11=y |
| @@ -324,18 +364,32 @@ CONFIG_REGULATOR_TWL4030=y | |||
| 324 | CONFIG_REGULATOR_VEXPRESS=y | 364 | CONFIG_REGULATOR_VEXPRESS=y |
| 325 | CONFIG_MEDIA_SUPPORT=y | 365 | CONFIG_MEDIA_SUPPORT=y |
| 326 | CONFIG_MEDIA_CAMERA_SUPPORT=y | 366 | CONFIG_MEDIA_CAMERA_SUPPORT=y |
| 367 | CONFIG_MEDIA_CONTROLLER=y | ||
| 368 | CONFIG_VIDEO_V4L2_SUBDEV_API=y | ||
| 327 | CONFIG_MEDIA_USB_SUPPORT=y | 369 | CONFIG_MEDIA_USB_SUPPORT=y |
| 328 | CONFIG_USB_VIDEO_CLASS=y | 370 | CONFIG_USB_VIDEO_CLASS=y |
| 329 | CONFIG_USB_GSPCA=y | 371 | CONFIG_USB_GSPCA=y |
| 372 | CONFIG_V4L_PLATFORM_DRIVERS=y | ||
| 373 | CONFIG_SOC_CAMERA=m | ||
| 374 | CONFIG_SOC_CAMERA_PLATFORM=m | ||
| 375 | CONFIG_VIDEO_RCAR_VIN=m | ||
| 376 | CONFIG_V4L_MEM2MEM_DRIVERS=y | ||
| 377 | CONFIG_VIDEO_RENESAS_VSP1=m | ||
| 378 | # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set | ||
| 379 | CONFIG_VIDEO_ADV7180=m | ||
| 330 | CONFIG_DRM=y | 380 | CONFIG_DRM=y |
| 381 | CONFIG_DRM_RCAR_DU=m | ||
| 331 | CONFIG_DRM_TEGRA=y | 382 | CONFIG_DRM_TEGRA=y |
| 332 | CONFIG_DRM_PANEL_SIMPLE=y | 383 | CONFIG_DRM_PANEL_SIMPLE=y |
| 333 | CONFIG_FB_ARMCLCD=y | 384 | CONFIG_FB_ARMCLCD=y |
| 334 | CONFIG_FB_WM8505=y | 385 | CONFIG_FB_WM8505=y |
| 386 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
| 335 | CONFIG_FB_SIMPLE=y | 387 | CONFIG_FB_SIMPLE=y |
| 388 | CONFIG_FB_SH_MOBILE_MERAM=y | ||
| 336 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 389 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
| 337 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | 390 | CONFIG_BACKLIGHT_CLASS_DEVICE=y |
| 338 | CONFIG_BACKLIGHT_PWM=y | 391 | CONFIG_BACKLIGHT_PWM=y |
| 392 | CONFIG_BACKLIGHT_AS3711=y | ||
| 339 | CONFIG_FRAMEBUFFER_CONSOLE=y | 393 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 340 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | 394 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y |
| 341 | CONFIG_SOUND=y | 395 | CONFIG_SOUND=y |
| @@ -343,6 +397,8 @@ CONFIG_SND=y | |||
| 343 | CONFIG_SND_DYNAMIC_MINORS=y | 397 | CONFIG_SND_DYNAMIC_MINORS=y |
| 344 | CONFIG_SND_USB_AUDIO=y | 398 | CONFIG_SND_USB_AUDIO=y |
| 345 | CONFIG_SND_SOC=y | 399 | CONFIG_SND_SOC=y |
| 400 | CONFIG_SND_SOC_SH4_FSI=m | ||
| 401 | CONFIG_SND_SOC_RCAR=m | ||
| 346 | CONFIG_SND_SOC_TEGRA=y | 402 | CONFIG_SND_SOC_TEGRA=y |
| 347 | CONFIG_SND_SOC_TEGRA_RT5640=y | 403 | CONFIG_SND_SOC_TEGRA_RT5640=y |
| 348 | CONFIG_SND_SOC_TEGRA_WM8753=y | 404 | CONFIG_SND_SOC_TEGRA_WM8753=y |
| @@ -350,6 +406,8 @@ CONFIG_SND_SOC_TEGRA_WM8903=y | |||
| 350 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y | 406 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y |
| 351 | CONFIG_SND_SOC_TEGRA_ALC5632=y | 407 | CONFIG_SND_SOC_TEGRA_ALC5632=y |
| 352 | CONFIG_SND_SOC_TEGRA_MAX98090=y | 408 | CONFIG_SND_SOC_TEGRA_MAX98090=y |
| 409 | CONFIG_SND_SOC_AK4642=m | ||
| 410 | CONFIG_SND_SOC_WM8978=m | ||
| 353 | CONFIG_USB=y | 411 | CONFIG_USB=y |
| 354 | CONFIG_USB_XHCI_HCD=y | 412 | CONFIG_USB_XHCI_HCD=y |
| 355 | CONFIG_USB_XHCI_MVEBU=y | 413 | CONFIG_USB_XHCI_MVEBU=y |
| @@ -362,6 +420,8 @@ CONFIG_USB_ISP1760_HCD=y | |||
| 362 | CONFIG_USB_OHCI_HCD=y | 420 | CONFIG_USB_OHCI_HCD=y |
| 363 | CONFIG_USB_OHCI_HCD_STI=y | 421 | CONFIG_USB_OHCI_HCD_STI=y |
| 364 | CONFIG_USB_OHCI_HCD_PLATFORM=y | 422 | CONFIG_USB_OHCI_HCD_PLATFORM=y |
| 423 | CONFIG_USB_R8A66597_HCD=m | ||
| 424 | CONFIG_USB_RENESAS_USBHS=m | ||
| 365 | CONFIG_USB_STORAGE=y | 425 | CONFIG_USB_STORAGE=y |
| 366 | CONFIG_USB_DWC3=y | 426 | CONFIG_USB_DWC3=y |
| 367 | CONFIG_USB_CHIPIDEA=y | 427 | CONFIG_USB_CHIPIDEA=y |
| @@ -374,6 +434,10 @@ CONFIG_SAMSUNG_USB3PHY=y | |||
| 374 | CONFIG_USB_GPIO_VBUS=y | 434 | CONFIG_USB_GPIO_VBUS=y |
| 375 | CONFIG_USB_ISP1301=y | 435 | CONFIG_USB_ISP1301=y |
| 376 | CONFIG_USB_MXS_PHY=y | 436 | CONFIG_USB_MXS_PHY=y |
| 437 | CONFIG_USB_RCAR_PHY=m | ||
| 438 | CONFIG_USB_RCAR_GEN2_PHY=m | ||
| 439 | CONFIG_USB_GADGET=y | ||
| 440 | CONFIG_USB_RENESAS_USBHS_UDC=m | ||
| 377 | CONFIG_MMC=y | 441 | CONFIG_MMC=y |
| 378 | CONFIG_MMC_BLOCK_MINORS=16 | 442 | CONFIG_MMC_BLOCK_MINORS=16 |
| 379 | CONFIG_MMC_ARMMMCI=y | 443 | CONFIG_MMC_ARMMMCI=y |
| @@ -392,12 +456,14 @@ CONFIG_MMC_SDHCI_ST=y | |||
| 392 | CONFIG_MMC_OMAP=y | 456 | CONFIG_MMC_OMAP=y |
| 393 | CONFIG_MMC_OMAP_HS=y | 457 | CONFIG_MMC_OMAP_HS=y |
| 394 | CONFIG_MMC_MVSDIO=y | 458 | CONFIG_MMC_MVSDIO=y |
| 395 | CONFIG_MMC_SUNXI=y | 459 | CONFIG_MMC_SDHI=y |
| 396 | CONFIG_MMC_DW=y | 460 | CONFIG_MMC_DW=y |
| 397 | CONFIG_MMC_DW_IDMAC=y | 461 | CONFIG_MMC_DW_IDMAC=y |
| 398 | CONFIG_MMC_DW_PLTFM=y | 462 | CONFIG_MMC_DW_PLTFM=y |
| 399 | CONFIG_MMC_DW_EXYNOS=y | 463 | CONFIG_MMC_DW_EXYNOS=y |
| 400 | CONFIG_MMC_DW_ROCKCHIP=y | 464 | CONFIG_MMC_DW_ROCKCHIP=y |
| 465 | CONFIG_MMC_SH_MMCIF=y | ||
| 466 | CONFIG_MMC_SUNXI=y | ||
| 401 | CONFIG_NEW_LEDS=y | 467 | CONFIG_NEW_LEDS=y |
| 402 | CONFIG_LEDS_CLASS=y | 468 | CONFIG_LEDS_CLASS=y |
| 403 | CONFIG_LEDS_GPIO=y | 469 | CONFIG_LEDS_GPIO=y |
| @@ -421,10 +487,12 @@ CONFIG_RTC_DRV_AS3722=y | |||
| 421 | CONFIG_RTC_DRV_DS1307=y | 487 | CONFIG_RTC_DRV_DS1307=y |
| 422 | CONFIG_RTC_DRV_MAX8907=y | 488 | CONFIG_RTC_DRV_MAX8907=y |
| 423 | CONFIG_RTC_DRV_MAX77686=y | 489 | CONFIG_RTC_DRV_MAX77686=y |
| 490 | CONFIG_RTC_DRV_RS5C372=m | ||
| 424 | CONFIG_RTC_DRV_PALMAS=y | 491 | CONFIG_RTC_DRV_PALMAS=y |
| 425 | CONFIG_RTC_DRV_TWL4030=y | 492 | CONFIG_RTC_DRV_TWL4030=y |
| 426 | CONFIG_RTC_DRV_TPS6586X=y | 493 | CONFIG_RTC_DRV_TPS6586X=y |
| 427 | CONFIG_RTC_DRV_TPS65910=y | 494 | CONFIG_RTC_DRV_TPS65910=y |
| 495 | CONFIG_RTC_DRV_S35390A=m | ||
| 428 | CONFIG_RTC_DRV_EM3027=y | 496 | CONFIG_RTC_DRV_EM3027=y |
| 429 | CONFIG_RTC_DRV_PL031=y | 497 | CONFIG_RTC_DRV_PL031=y |
| 430 | CONFIG_RTC_DRV_VT8500=y | 498 | CONFIG_RTC_DRV_VT8500=y |
| @@ -436,6 +504,9 @@ CONFIG_DMADEVICES=y | |||
| 436 | CONFIG_DW_DMAC=y | 504 | CONFIG_DW_DMAC=y |
| 437 | CONFIG_MV_XOR=y | 505 | CONFIG_MV_XOR=y |
| 438 | CONFIG_TEGRA20_APB_DMA=y | 506 | CONFIG_TEGRA20_APB_DMA=y |
| 507 | CONFIG_SH_DMAE=y | ||
| 508 | CONFIG_RCAR_AUDMAC_PP=m | ||
| 509 | CONFIG_RCAR_DMAC=y | ||
| 439 | CONFIG_STE_DMA40=y | 510 | CONFIG_STE_DMA40=y |
| 440 | CONFIG_SIRF_DMA=y | 511 | CONFIG_SIRF_DMA=y |
| 441 | CONFIG_TI_EDMA=y | 512 | CONFIG_TI_EDMA=y |
| @@ -468,6 +539,7 @@ CONFIG_IIO=y | |||
| 468 | CONFIG_XILINX_XADC=y | 539 | CONFIG_XILINX_XADC=y |
| 469 | CONFIG_AK8975=y | 540 | CONFIG_AK8975=y |
| 470 | CONFIG_PWM=y | 541 | CONFIG_PWM=y |
| 542 | CONFIG_PWM_RENESAS_TPU=y | ||
| 471 | CONFIG_PWM_TEGRA=y | 543 | CONFIG_PWM_TEGRA=y |
| 472 | CONFIG_PWM_VT8500=y | 544 | CONFIG_PWM_VT8500=y |
| 473 | CONFIG_PHY_HIX5HD2_SATA=y | 545 | CONFIG_PHY_HIX5HD2_SATA=y |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index b7386524c356..a097cffa1231 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
| @@ -114,6 +114,7 @@ CONFIG_MTD_PHYSMAP_OF=y | |||
| 114 | CONFIG_MTD_NAND=y | 114 | CONFIG_MTD_NAND=y |
| 115 | CONFIG_MTD_NAND_ECC_BCH=y | 115 | CONFIG_MTD_NAND_ECC_BCH=y |
| 116 | CONFIG_MTD_NAND_OMAP2=y | 116 | CONFIG_MTD_NAND_OMAP2=y |
| 117 | CONFIG_MTD_NAND_OMAP_BCH=y | ||
| 117 | CONFIG_MTD_ONENAND=y | 118 | CONFIG_MTD_ONENAND=y |
| 118 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y | 119 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y |
| 119 | CONFIG_MTD_ONENAND_OMAP2=y | 120 | CONFIG_MTD_ONENAND_OMAP2=y |
| @@ -248,6 +249,7 @@ CONFIG_TWL6040_CORE=y | |||
| 248 | CONFIG_REGULATOR_PALMAS=y | 249 | CONFIG_REGULATOR_PALMAS=y |
| 249 | CONFIG_REGULATOR_PBIAS=y | 250 | CONFIG_REGULATOR_PBIAS=y |
| 250 | CONFIG_REGULATOR_TI_ABB=y | 251 | CONFIG_REGULATOR_TI_ABB=y |
| 252 | CONFIG_REGULATOR_TPS62360=m | ||
| 251 | CONFIG_REGULATOR_TPS65023=y | 253 | CONFIG_REGULATOR_TPS65023=y |
| 252 | CONFIG_REGULATOR_TPS6507X=y | 254 | CONFIG_REGULATOR_TPS6507X=y |
| 253 | CONFIG_REGULATOR_TPS65217=y | 255 | CONFIG_REGULATOR_TPS65217=y |
| @@ -374,7 +376,7 @@ CONFIG_PWM_TIEHRPWM=m | |||
| 374 | CONFIG_PWM_TWL=m | 376 | CONFIG_PWM_TWL=m |
| 375 | CONFIG_PWM_TWL_LED=m | 377 | CONFIG_PWM_TWL_LED=m |
| 376 | CONFIG_OMAP_USB2=m | 378 | CONFIG_OMAP_USB2=m |
| 377 | CONFIG_TI_PIPE3=m | 379 | CONFIG_TI_PIPE3=y |
| 378 | CONFIG_EXT2_FS=y | 380 | CONFIG_EXT2_FS=y |
| 379 | CONFIG_EXT3_FS=y | 381 | CONFIG_EXT3_FS=y |
| 380 | # CONFIG_EXT3_FS_XATTR is not set | 382 | # CONFIG_EXT3_FS_XATTR is not set |
diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts b/arch/arm64/boot/dts/arm/foundation-v8.dts index 27f32962e55c..4eac8dcea423 100644 --- a/arch/arm64/boot/dts/arm/foundation-v8.dts +++ b/arch/arm64/boot/dts/arm/foundation-v8.dts | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | reg = <0x0 0x0>; | 34 | reg = <0x0 0x0>; |
| 35 | enable-method = "spin-table"; | 35 | enable-method = "spin-table"; |
| 36 | cpu-release-addr = <0x0 0x8000fff8>; | 36 | cpu-release-addr = <0x0 0x8000fff8>; |
| 37 | next-level-cache = <&L2_0>; | ||
| 37 | }; | 38 | }; |
| 38 | cpu@1 { | 39 | cpu@1 { |
| 39 | device_type = "cpu"; | 40 | device_type = "cpu"; |
| @@ -41,6 +42,7 @@ | |||
| 41 | reg = <0x0 0x1>; | 42 | reg = <0x0 0x1>; |
| 42 | enable-method = "spin-table"; | 43 | enable-method = "spin-table"; |
| 43 | cpu-release-addr = <0x0 0x8000fff8>; | 44 | cpu-release-addr = <0x0 0x8000fff8>; |
| 45 | next-level-cache = <&L2_0>; | ||
| 44 | }; | 46 | }; |
| 45 | cpu@2 { | 47 | cpu@2 { |
| 46 | device_type = "cpu"; | 48 | device_type = "cpu"; |
| @@ -48,6 +50,7 @@ | |||
| 48 | reg = <0x0 0x2>; | 50 | reg = <0x0 0x2>; |
| 49 | enable-method = "spin-table"; | 51 | enable-method = "spin-table"; |
| 50 | cpu-release-addr = <0x0 0x8000fff8>; | 52 | cpu-release-addr = <0x0 0x8000fff8>; |
| 53 | next-level-cache = <&L2_0>; | ||
| 51 | }; | 54 | }; |
| 52 | cpu@3 { | 55 | cpu@3 { |
| 53 | device_type = "cpu"; | 56 | device_type = "cpu"; |
| @@ -55,6 +58,11 @@ | |||
| 55 | reg = <0x0 0x3>; | 58 | reg = <0x0 0x3>; |
| 56 | enable-method = "spin-table"; | 59 | enable-method = "spin-table"; |
| 57 | cpu-release-addr = <0x0 0x8000fff8>; | 60 | cpu-release-addr = <0x0 0x8000fff8>; |
| 61 | next-level-cache = <&L2_0>; | ||
| 62 | }; | ||
| 63 | |||
| 64 | L2_0: l2-cache0 { | ||
| 65 | compatible = "cache"; | ||
| 58 | }; | 66 | }; |
| 59 | }; | 67 | }; |
| 60 | 68 | ||
diff --git a/arch/arm64/boot/dts/arm/juno.dts b/arch/arm64/boot/dts/arm/juno.dts index d429129ecb3d..133ee59de2d7 100644 --- a/arch/arm64/boot/dts/arm/juno.dts +++ b/arch/arm64/boot/dts/arm/juno.dts | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | reg = <0x0 0x0>; | 39 | reg = <0x0 0x0>; |
| 40 | device_type = "cpu"; | 40 | device_type = "cpu"; |
| 41 | enable-method = "psci"; | 41 | enable-method = "psci"; |
| 42 | next-level-cache = <&A57_L2>; | ||
| 42 | }; | 43 | }; |
| 43 | 44 | ||
| 44 | A57_1: cpu@1 { | 45 | A57_1: cpu@1 { |
| @@ -46,6 +47,7 @@ | |||
| 46 | reg = <0x0 0x1>; | 47 | reg = <0x0 0x1>; |
| 47 | device_type = "cpu"; | 48 | device_type = "cpu"; |
| 48 | enable-method = "psci"; | 49 | enable-method = "psci"; |
| 50 | next-level-cache = <&A57_L2>; | ||
| 49 | }; | 51 | }; |
| 50 | 52 | ||
| 51 | A53_0: cpu@100 { | 53 | A53_0: cpu@100 { |
| @@ -53,6 +55,7 @@ | |||
| 53 | reg = <0x0 0x100>; | 55 | reg = <0x0 0x100>; |
| 54 | device_type = "cpu"; | 56 | device_type = "cpu"; |
| 55 | enable-method = "psci"; | 57 | enable-method = "psci"; |
| 58 | next-level-cache = <&A53_L2>; | ||
| 56 | }; | 59 | }; |
| 57 | 60 | ||
| 58 | A53_1: cpu@101 { | 61 | A53_1: cpu@101 { |
| @@ -60,6 +63,7 @@ | |||
| 60 | reg = <0x0 0x101>; | 63 | reg = <0x0 0x101>; |
| 61 | device_type = "cpu"; | 64 | device_type = "cpu"; |
| 62 | enable-method = "psci"; | 65 | enable-method = "psci"; |
| 66 | next-level-cache = <&A53_L2>; | ||
| 63 | }; | 67 | }; |
| 64 | 68 | ||
| 65 | A53_2: cpu@102 { | 69 | A53_2: cpu@102 { |
| @@ -67,6 +71,7 @@ | |||
| 67 | reg = <0x0 0x102>; | 71 | reg = <0x0 0x102>; |
| 68 | device_type = "cpu"; | 72 | device_type = "cpu"; |
| 69 | enable-method = "psci"; | 73 | enable-method = "psci"; |
| 74 | next-level-cache = <&A53_L2>; | ||
| 70 | }; | 75 | }; |
| 71 | 76 | ||
| 72 | A53_3: cpu@103 { | 77 | A53_3: cpu@103 { |
| @@ -74,6 +79,15 @@ | |||
| 74 | reg = <0x0 0x103>; | 79 | reg = <0x0 0x103>; |
| 75 | device_type = "cpu"; | 80 | device_type = "cpu"; |
| 76 | enable-method = "psci"; | 81 | enable-method = "psci"; |
| 82 | next-level-cache = <&A53_L2>; | ||
| 83 | }; | ||
| 84 | |||
| 85 | A57_L2: l2-cache0 { | ||
| 86 | compatible = "cache"; | ||
| 87 | }; | ||
| 88 | |||
| 89 | A53_L2: l2-cache1 { | ||
| 90 | compatible = "cache"; | ||
| 77 | }; | 91 | }; |
| 78 | }; | 92 | }; |
| 79 | 93 | ||
diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts index efc59b3baf63..20addabbd127 100644 --- a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts +++ b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | reg = <0x0 0x0>; | 37 | reg = <0x0 0x0>; |
| 38 | enable-method = "spin-table"; | 38 | enable-method = "spin-table"; |
| 39 | cpu-release-addr = <0x0 0x8000fff8>; | 39 | cpu-release-addr = <0x0 0x8000fff8>; |
| 40 | next-level-cache = <&L2_0>; | ||
| 40 | }; | 41 | }; |
| 41 | cpu@1 { | 42 | cpu@1 { |
| 42 | device_type = "cpu"; | 43 | device_type = "cpu"; |
| @@ -44,6 +45,7 @@ | |||
| 44 | reg = <0x0 0x1>; | 45 | reg = <0x0 0x1>; |
| 45 | enable-method = "spin-table"; | 46 | enable-method = "spin-table"; |
| 46 | cpu-release-addr = <0x0 0x8000fff8>; | 47 | cpu-release-addr = <0x0 0x8000fff8>; |
| 48 | next-level-cache = <&L2_0>; | ||
| 47 | }; | 49 | }; |
| 48 | cpu@2 { | 50 | cpu@2 { |
| 49 | device_type = "cpu"; | 51 | device_type = "cpu"; |
| @@ -51,6 +53,7 @@ | |||
| 51 | reg = <0x0 0x2>; | 53 | reg = <0x0 0x2>; |
| 52 | enable-method = "spin-table"; | 54 | enable-method = "spin-table"; |
| 53 | cpu-release-addr = <0x0 0x8000fff8>; | 55 | cpu-release-addr = <0x0 0x8000fff8>; |
| 56 | next-level-cache = <&L2_0>; | ||
| 54 | }; | 57 | }; |
| 55 | cpu@3 { | 58 | cpu@3 { |
| 56 | device_type = "cpu"; | 59 | device_type = "cpu"; |
| @@ -58,6 +61,11 @@ | |||
| 58 | reg = <0x0 0x3>; | 61 | reg = <0x0 0x3>; |
| 59 | enable-method = "spin-table"; | 62 | enable-method = "spin-table"; |
| 60 | cpu-release-addr = <0x0 0x8000fff8>; | 63 | cpu-release-addr = <0x0 0x8000fff8>; |
| 64 | next-level-cache = <&L2_0>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | L2_0: l2-cache0 { | ||
| 68 | compatible = "cache"; | ||
| 61 | }; | 69 | }; |
| 62 | }; | 70 | }; |
| 63 | 71 | ||
diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile index 5720608c50b1..abb79b3cfcfe 100644 --- a/arch/arm64/crypto/Makefile +++ b/arch/arm64/crypto/Makefile | |||
| @@ -29,7 +29,7 @@ aes-ce-blk-y := aes-glue-ce.o aes-ce.o | |||
| 29 | obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o | 29 | obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o |
| 30 | aes-neon-blk-y := aes-glue-neon.o aes-neon.o | 30 | aes-neon-blk-y := aes-glue-neon.o aes-neon.o |
| 31 | 31 | ||
| 32 | AFLAGS_aes-ce.o := -DINTERLEAVE=2 -DINTERLEAVE_INLINE | 32 | AFLAGS_aes-ce.o := -DINTERLEAVE=4 |
| 33 | AFLAGS_aes-neon.o := -DINTERLEAVE=4 | 33 | AFLAGS_aes-neon.o := -DINTERLEAVE=4 |
| 34 | 34 | ||
| 35 | CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS | 35 | CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS |
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index 5901480bfdca..750bac4e637e 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h | |||
| @@ -20,6 +20,9 @@ | |||
| 20 | #error "Only include this from assembly code" | 20 | #error "Only include this from assembly code" |
| 21 | #endif | 21 | #endif |
| 22 | 22 | ||
| 23 | #ifndef __ASM_ASSEMBLER_H | ||
| 24 | #define __ASM_ASSEMBLER_H | ||
| 25 | |||
| 23 | #include <asm/ptrace.h> | 26 | #include <asm/ptrace.h> |
| 24 | #include <asm/thread_info.h> | 27 | #include <asm/thread_info.h> |
| 25 | 28 | ||
| @@ -155,3 +158,5 @@ lr .req x30 // link register | |||
| 155 | #endif | 158 | #endif |
| 156 | orr \rd, \lbits, \hbits, lsl #32 | 159 | orr \rd, \lbits, \hbits, lsl #32 |
| 157 | .endm | 160 | .endm |
| 161 | |||
| 162 | #endif /* __ASM_ASSEMBLER_H */ | ||
diff --git a/arch/arm64/include/asm/cpuidle.h b/arch/arm64/include/asm/cpuidle.h index 0710654631e7..c60643f14cda 100644 --- a/arch/arm64/include/asm/cpuidle.h +++ b/arch/arm64/include/asm/cpuidle.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __ASM_CPUIDLE_H | 1 | #ifndef __ASM_CPUIDLE_H |
| 2 | #define __ASM_CPUIDLE_H | 2 | #define __ASM_CPUIDLE_H |
| 3 | 3 | ||
| 4 | #include <asm/proc-fns.h> | ||
| 5 | |||
| 4 | #ifdef CONFIG_CPU_IDLE | 6 | #ifdef CONFIG_CPU_IDLE |
| 5 | extern int cpu_init_idle(unsigned int cpu); | 7 | extern int cpu_init_idle(unsigned int cpu); |
| 6 | extern int cpu_suspend(unsigned long arg); | 8 | extern int cpu_suspend(unsigned long arg); |
diff --git a/arch/arm64/include/asm/insn.h b/arch/arm64/include/asm/insn.h index e2ff32a93b5c..d2f49423c5dc 100644 --- a/arch/arm64/include/asm/insn.h +++ b/arch/arm64/include/asm/insn.h | |||
| @@ -264,8 +264,10 @@ __AARCH64_INSN_FUNCS(ands, 0x7F200000, 0x6A000000) | |||
| 264 | __AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000) | 264 | __AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000) |
| 265 | __AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000) | 265 | __AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000) |
| 266 | __AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000) | 266 | __AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000) |
| 267 | __AARCH64_INSN_FUNCS(cbz, 0xFE000000, 0x34000000) | 267 | __AARCH64_INSN_FUNCS(cbz, 0x7F000000, 0x34000000) |
| 268 | __AARCH64_INSN_FUNCS(cbnz, 0xFE000000, 0x35000000) | 268 | __AARCH64_INSN_FUNCS(cbnz, 0x7F000000, 0x35000000) |
| 269 | __AARCH64_INSN_FUNCS(tbz, 0x7F000000, 0x36000000) | ||
| 270 | __AARCH64_INSN_FUNCS(tbnz, 0x7F000000, 0x37000000) | ||
| 269 | __AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000) | 271 | __AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000) |
| 270 | __AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001) | 272 | __AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001) |
| 271 | __AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002) | 273 | __AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002) |
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 16449c535e50..800ec0e87ed9 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h | |||
| @@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr) | |||
| 460 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 460 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
| 461 | { | 461 | { |
| 462 | const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | | 462 | const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | |
| 463 | PTE_PROT_NONE | PTE_VALID | PTE_WRITE; | 463 | PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK; |
| 464 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); | 464 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); |
| 465 | return pte; | 465 | return pte; |
| 466 | } | 466 | } |
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index f9be30ea1cbd..20e9591a60cf 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h | |||
| @@ -45,7 +45,8 @@ | |||
| 45 | #define STACK_TOP STACK_TOP_MAX | 45 | #define STACK_TOP STACK_TOP_MAX |
| 46 | #endif /* CONFIG_COMPAT */ | 46 | #endif /* CONFIG_COMPAT */ |
| 47 | 47 | ||
| 48 | #define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK | 48 | extern phys_addr_t arm64_dma_phys_limit; |
| 49 | #define ARCH_LOW_ADDRESS_LIMIT (arm64_dma_phys_limit - 1) | ||
| 49 | #endif /* __KERNEL__ */ | 50 | #endif /* __KERNEL__ */ |
| 50 | 51 | ||
| 51 | struct debug_info { | 52 | struct debug_info { |
diff --git a/arch/arm64/include/asm/tlbflush.h b/arch/arm64/include/asm/tlbflush.h index 73f0ce570fb3..4abe9b945f77 100644 --- a/arch/arm64/include/asm/tlbflush.h +++ b/arch/arm64/include/asm/tlbflush.h | |||
| @@ -24,11 +24,6 @@ | |||
| 24 | #include <linux/sched.h> | 24 | #include <linux/sched.h> |
| 25 | #include <asm/cputype.h> | 25 | #include <asm/cputype.h> |
| 26 | 26 | ||
| 27 | extern void __cpu_flush_user_tlb_range(unsigned long, unsigned long, struct vm_area_struct *); | ||
| 28 | extern void __cpu_flush_kern_tlb_range(unsigned long, unsigned long); | ||
| 29 | |||
| 30 | extern struct cpu_tlb_fns cpu_tlb; | ||
| 31 | |||
| 32 | /* | 27 | /* |
| 33 | * TLB Management | 28 | * TLB Management |
| 34 | * ============== | 29 | * ============== |
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index bef04afd6031..5ee07eee80c2 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile | |||
| @@ -15,8 +15,9 @@ CFLAGS_REMOVE_return_address.o = -pg | |||
| 15 | arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \ | 15 | arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \ |
| 16 | entry-fpsimd.o process.o ptrace.o setup.o signal.o \ | 16 | entry-fpsimd.o process.o ptrace.o setup.o signal.o \ |
| 17 | sys.o stacktrace.o time.o traps.o io.o vdso.o \ | 17 | sys.o stacktrace.o time.o traps.o io.o vdso.o \ |
| 18 | hyp-stub.o psci.o cpu_ops.o insn.o return_address.o \ | 18 | hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o \ |
| 19 | cpuinfo.o cpu_errata.o alternative.o cacheinfo.o | 19 | return_address.o cpuinfo.o cpu_errata.o \ |
| 20 | alternative.o cacheinfo.o | ||
| 20 | 21 | ||
| 21 | arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ | 22 | arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ |
| 22 | sys_compat.o entry32.o \ | 23 | sys_compat.o entry32.o \ |
diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c index cf8556ae09d0..c851be795080 100644 --- a/arch/arm64/kernel/ftrace.c +++ b/arch/arm64/kernel/ftrace.c | |||
| @@ -156,7 +156,7 @@ static int ftrace_modify_graph_caller(bool enable) | |||
| 156 | 156 | ||
| 157 | branch = aarch64_insn_gen_branch_imm(pc, | 157 | branch = aarch64_insn_gen_branch_imm(pc, |
| 158 | (unsigned long)ftrace_graph_caller, | 158 | (unsigned long)ftrace_graph_caller, |
| 159 | AARCH64_INSN_BRANCH_LINK); | 159 | AARCH64_INSN_BRANCH_NOLINK); |
| 160 | nop = aarch64_insn_gen_nop(); | 160 | nop = aarch64_insn_gen_nop(); |
| 161 | 161 | ||
| 162 | if (enable) | 162 | if (enable) |
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c index 27d4864577e5..c8eca88f12e6 100644 --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c | |||
| @@ -87,8 +87,10 @@ static void __kprobes *patch_map(void *addr, int fixmap) | |||
| 87 | 87 | ||
| 88 | if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) | 88 | if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) |
| 89 | page = vmalloc_to_page(addr); | 89 | page = vmalloc_to_page(addr); |
| 90 | else | 90 | else if (!module && IS_ENABLED(CONFIG_DEBUG_RODATA)) |
| 91 | page = virt_to_page(addr); | 91 | page = virt_to_page(addr); |
| 92 | else | ||
| 93 | return addr; | ||
| 92 | 94 | ||
| 93 | BUG_ON(!page); | 95 | BUG_ON(!page); |
| 94 | set_fixmap(fixmap, page_to_phys(page)); | 96 | set_fixmap(fixmap, page_to_phys(page)); |
diff --git a/arch/arm64/kernel/psci-call.S b/arch/arm64/kernel/psci-call.S new file mode 100644 index 000000000000..cf83e61cd3b5 --- /dev/null +++ b/arch/arm64/kernel/psci-call.S | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or modify | ||
| 3 | * it under the terms of the GNU General Public License version 2 as | ||
| 4 | * published by the Free Software Foundation. | ||
| 5 | * | ||
| 6 | * This program is distributed in the hope that it will be useful, | ||
| 7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 9 | * GNU General Public License for more details. | ||
| 10 | * | ||
| 11 | * Copyright (C) 2015 ARM Limited | ||
| 12 | * | ||
| 13 | * Author: Will Deacon <will.deacon@arm.com> | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/linkage.h> | ||
| 17 | |||
| 18 | /* int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */ | ||
| 19 | ENTRY(__invoke_psci_fn_hvc) | ||
| 20 | hvc #0 | ||
| 21 | ret | ||
| 22 | ENDPROC(__invoke_psci_fn_hvc) | ||
| 23 | |||
| 24 | /* int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */ | ||
| 25 | ENTRY(__invoke_psci_fn_smc) | ||
| 26 | smc #0 | ||
| 27 | ret | ||
| 28 | ENDPROC(__invoke_psci_fn_smc) | ||
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c index 3425f311c49e..9b8a70ae64a1 100644 --- a/arch/arm64/kernel/psci.c +++ b/arch/arm64/kernel/psci.c | |||
| @@ -57,6 +57,9 @@ static struct psci_operations psci_ops; | |||
| 57 | static int (*invoke_psci_fn)(u64, u64, u64, u64); | 57 | static int (*invoke_psci_fn)(u64, u64, u64, u64); |
| 58 | typedef int (*psci_initcall_t)(const struct device_node *); | 58 | typedef int (*psci_initcall_t)(const struct device_node *); |
| 59 | 59 | ||
| 60 | asmlinkage int __invoke_psci_fn_hvc(u64, u64, u64, u64); | ||
| 61 | asmlinkage int __invoke_psci_fn_smc(u64, u64, u64, u64); | ||
| 62 | |||
| 60 | enum psci_function { | 63 | enum psci_function { |
| 61 | PSCI_FN_CPU_SUSPEND, | 64 | PSCI_FN_CPU_SUSPEND, |
| 62 | PSCI_FN_CPU_ON, | 65 | PSCI_FN_CPU_ON, |
| @@ -109,40 +112,6 @@ static void psci_power_state_unpack(u32 power_state, | |||
| 109 | PSCI_0_2_POWER_STATE_AFFL_SHIFT; | 112 | PSCI_0_2_POWER_STATE_AFFL_SHIFT; |
| 110 | } | 113 | } |
| 111 | 114 | ||
| 112 | /* | ||
| 113 | * The following two functions are invoked via the invoke_psci_fn pointer | ||
| 114 | * and will not be inlined, allowing us to piggyback on the AAPCS. | ||
| 115 | */ | ||
| 116 | static noinline int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, | ||
| 117 | u64 arg2) | ||
| 118 | { | ||
| 119 | asm volatile( | ||
| 120 | __asmeq("%0", "x0") | ||
| 121 | __asmeq("%1", "x1") | ||
| 122 | __asmeq("%2", "x2") | ||
| 123 | __asmeq("%3", "x3") | ||
| 124 | "hvc #0\n" | ||
| 125 | : "+r" (function_id) | ||
| 126 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
| 127 | |||
| 128 | return function_id; | ||
| 129 | } | ||
| 130 | |||
| 131 | static noinline int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, | ||
| 132 | u64 arg2) | ||
| 133 | { | ||
| 134 | asm volatile( | ||
| 135 | __asmeq("%0", "x0") | ||
| 136 | __asmeq("%1", "x1") | ||
| 137 | __asmeq("%2", "x2") | ||
| 138 | __asmeq("%3", "x3") | ||
| 139 | "smc #0\n" | ||
| 140 | : "+r" (function_id) | ||
| 141 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
| 142 | |||
| 143 | return function_id; | ||
| 144 | } | ||
| 145 | |||
| 146 | static int psci_get_version(void) | 115 | static int psci_get_version(void) |
| 147 | { | 116 | { |
| 148 | int err; | 117 | int err; |
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index c20a300e2213..d26fcd4cd6e6 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c | |||
| @@ -154,8 +154,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from) | |||
| 154 | case __SI_TIMER: | 154 | case __SI_TIMER: |
| 155 | err |= __put_user(from->si_tid, &to->si_tid); | 155 | err |= __put_user(from->si_tid, &to->si_tid); |
| 156 | err |= __put_user(from->si_overrun, &to->si_overrun); | 156 | err |= __put_user(from->si_overrun, &to->si_overrun); |
| 157 | err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, | 157 | err |= __put_user(from->si_int, &to->si_int); |
| 158 | &to->si_ptr); | ||
| 159 | break; | 158 | break; |
| 160 | case __SI_POLL: | 159 | case __SI_POLL: |
| 161 | err |= __put_user(from->si_band, &to->si_band); | 160 | err |= __put_user(from->si_band, &to->si_band); |
| @@ -184,7 +183,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from) | |||
| 184 | case __SI_MESGQ: /* But this is */ | 183 | case __SI_MESGQ: /* But this is */ |
| 185 | err |= __put_user(from->si_pid, &to->si_pid); | 184 | err |= __put_user(from->si_pid, &to->si_pid); |
| 186 | err |= __put_user(from->si_uid, &to->si_uid); | 185 | err |= __put_user(from->si_uid, &to->si_uid); |
| 187 | err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr); | 186 | err |= __put_user(from->si_int, &to->si_int); |
| 188 | break; | 187 | break; |
| 189 | case __SI_SYS: | 188 | case __SI_SYS: |
| 190 | err |= __put_user((compat_uptr_t)(unsigned long) | 189 | err |= __put_user((compat_uptr_t)(unsigned long) |
diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index fe652ffd34c2..efa79e8d4196 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S | |||
| @@ -174,8 +174,6 @@ ENDPROC(__kernel_clock_gettime) | |||
| 174 | /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ | 174 | /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ |
| 175 | ENTRY(__kernel_clock_getres) | 175 | ENTRY(__kernel_clock_getres) |
| 176 | .cfi_startproc | 176 | .cfi_startproc |
| 177 | cbz w1, 3f | ||
| 178 | |||
| 179 | cmp w0, #CLOCK_REALTIME | 177 | cmp w0, #CLOCK_REALTIME |
| 180 | ccmp w0, #CLOCK_MONOTONIC, #0x4, ne | 178 | ccmp w0, #CLOCK_MONOTONIC, #0x4, ne |
| 181 | b.ne 1f | 179 | b.ne 1f |
| @@ -188,6 +186,7 @@ ENTRY(__kernel_clock_getres) | |||
| 188 | b.ne 4f | 186 | b.ne 4f |
| 189 | ldr x2, 6f | 187 | ldr x2, 6f |
| 190 | 2: | 188 | 2: |
| 189 | cbz w1, 3f | ||
| 191 | stp xzr, x2, [x1] | 190 | stp xzr, x2, [x1] |
| 192 | 191 | ||
| 193 | 3: /* res == NULL. */ | 192 | 3: /* res == NULL. */ |
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 0a24b9b8c698..58e0c2bdde04 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c | |||
| @@ -348,8 +348,6 @@ static struct dma_map_ops swiotlb_dma_ops = { | |||
| 348 | .mapping_error = swiotlb_dma_mapping_error, | 348 | .mapping_error = swiotlb_dma_mapping_error, |
| 349 | }; | 349 | }; |
| 350 | 350 | ||
| 351 | extern int swiotlb_late_init_with_default_size(size_t default_size); | ||
| 352 | |||
| 353 | static int __init atomic_pool_init(void) | 351 | static int __init atomic_pool_init(void) |
| 354 | { | 352 | { |
| 355 | pgprot_t prot = __pgprot(PROT_NORMAL_NC); | 353 | pgprot_t prot = __pgprot(PROT_NORMAL_NC); |
| @@ -411,21 +409,13 @@ out: | |||
| 411 | return -ENOMEM; | 409 | return -ENOMEM; |
| 412 | } | 410 | } |
| 413 | 411 | ||
| 414 | static int __init swiotlb_late_init(void) | 412 | static int __init arm64_dma_init(void) |
| 415 | { | 413 | { |
| 416 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); | 414 | int ret; |
| 417 | 415 | ||
| 418 | dma_ops = &swiotlb_dma_ops; | 416 | dma_ops = &swiotlb_dma_ops; |
| 419 | 417 | ||
| 420 | return swiotlb_late_init_with_default_size(swiotlb_size); | 418 | ret = atomic_pool_init(); |
| 421 | } | ||
| 422 | |||
| 423 | static int __init arm64_dma_init(void) | ||
| 424 | { | ||
| 425 | int ret = 0; | ||
| 426 | |||
| 427 | ret |= swiotlb_late_init(); | ||
| 428 | ret |= atomic_pool_init(); | ||
| 429 | 419 | ||
| 430 | return ret; | 420 | return ret; |
| 431 | } | 421 | } |
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 71145f952070..ae85da6307bb 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/dma-mapping.h> | 33 | #include <linux/dma-mapping.h> |
| 34 | #include <linux/dma-contiguous.h> | 34 | #include <linux/dma-contiguous.h> |
| 35 | #include <linux/efi.h> | 35 | #include <linux/efi.h> |
| 36 | #include <linux/swiotlb.h> | ||
| 36 | 37 | ||
| 37 | #include <asm/fixmap.h> | 38 | #include <asm/fixmap.h> |
| 38 | #include <asm/memory.h> | 39 | #include <asm/memory.h> |
| @@ -45,6 +46,7 @@ | |||
| 45 | #include "mm.h" | 46 | #include "mm.h" |
| 46 | 47 | ||
| 47 | phys_addr_t memstart_addr __read_mostly = 0; | 48 | phys_addr_t memstart_addr __read_mostly = 0; |
| 49 | phys_addr_t arm64_dma_phys_limit __read_mostly; | ||
| 48 | 50 | ||
| 49 | #ifdef CONFIG_BLK_DEV_INITRD | 51 | #ifdef CONFIG_BLK_DEV_INITRD |
| 50 | static int __init early_initrd(char *p) | 52 | static int __init early_initrd(char *p) |
| @@ -85,7 +87,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) | |||
| 85 | 87 | ||
| 86 | /* 4GB maximum for 32-bit only capable devices */ | 88 | /* 4GB maximum for 32-bit only capable devices */ |
| 87 | if (IS_ENABLED(CONFIG_ZONE_DMA)) { | 89 | if (IS_ENABLED(CONFIG_ZONE_DMA)) { |
| 88 | max_dma = PFN_DOWN(max_zone_dma_phys()); | 90 | max_dma = PFN_DOWN(arm64_dma_phys_limit); |
| 89 | zone_size[ZONE_DMA] = max_dma - min; | 91 | zone_size[ZONE_DMA] = max_dma - min; |
| 90 | } | 92 | } |
| 91 | zone_size[ZONE_NORMAL] = max - max_dma; | 93 | zone_size[ZONE_NORMAL] = max - max_dma; |
| @@ -156,8 +158,6 @@ early_param("mem", early_mem); | |||
| 156 | 158 | ||
| 157 | void __init arm64_memblock_init(void) | 159 | void __init arm64_memblock_init(void) |
| 158 | { | 160 | { |
| 159 | phys_addr_t dma_phys_limit = 0; | ||
| 160 | |||
| 161 | memblock_enforce_memory_limit(memory_limit); | 161 | memblock_enforce_memory_limit(memory_limit); |
| 162 | 162 | ||
| 163 | /* | 163 | /* |
| @@ -174,8 +174,10 @@ void __init arm64_memblock_init(void) | |||
| 174 | 174 | ||
| 175 | /* 4GB maximum for 32-bit only capable devices */ | 175 | /* 4GB maximum for 32-bit only capable devices */ |
| 176 | if (IS_ENABLED(CONFIG_ZONE_DMA)) | 176 | if (IS_ENABLED(CONFIG_ZONE_DMA)) |
| 177 | dma_phys_limit = max_zone_dma_phys(); | 177 | arm64_dma_phys_limit = max_zone_dma_phys(); |
| 178 | dma_contiguous_reserve(dma_phys_limit); | 178 | else |
| 179 | arm64_dma_phys_limit = PHYS_MASK + 1; | ||
| 180 | dma_contiguous_reserve(arm64_dma_phys_limit); | ||
| 179 | 181 | ||
| 180 | memblock_allow_resize(); | 182 | memblock_allow_resize(); |
| 181 | memblock_dump_all(); | 183 | memblock_dump_all(); |
| @@ -276,6 +278,8 @@ static void __init free_unused_memmap(void) | |||
| 276 | */ | 278 | */ |
| 277 | void __init mem_init(void) | 279 | void __init mem_init(void) |
| 278 | { | 280 | { |
| 281 | swiotlb_init(1); | ||
| 282 | |||
| 279 | set_max_mapnr(pfn_to_page(max_pfn) - mem_map); | 283 | set_max_mapnr(pfn_to_page(max_pfn) - mem_map); |
| 280 | 284 | ||
| 281 | #ifndef CONFIG_SPARSEMEM_VMEMMAP | 285 | #ifndef CONFIG_SPARSEMEM_VMEMMAP |
diff --git a/arch/frv/include/asm/pgtable.h b/arch/frv/include/asm/pgtable.h index 93bcf2abd1a1..07d7a7ef8bd5 100644 --- a/arch/frv/include/asm/pgtable.h +++ b/arch/frv/include/asm/pgtable.h | |||
| @@ -123,12 +123,14 @@ extern unsigned long empty_zero_page; | |||
| 123 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) | 123 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) |
| 124 | #define PTRS_PER_PGD 64 | 124 | #define PTRS_PER_PGD 64 |
| 125 | 125 | ||
| 126 | #define __PAGETABLE_PUD_FOLDED | ||
| 126 | #define PUD_SHIFT 26 | 127 | #define PUD_SHIFT 26 |
| 127 | #define PTRS_PER_PUD 1 | 128 | #define PTRS_PER_PUD 1 |
| 128 | #define PUD_SIZE (1UL << PUD_SHIFT) | 129 | #define PUD_SIZE (1UL << PUD_SHIFT) |
| 129 | #define PUD_MASK (~(PUD_SIZE - 1)) | 130 | #define PUD_MASK (~(PUD_SIZE - 1)) |
| 130 | #define PUE_SIZE 256 | 131 | #define PUE_SIZE 256 |
| 131 | 132 | ||
| 133 | #define __PAGETABLE_PMD_FOLDED | ||
| 132 | #define PMD_SHIFT 26 | 134 | #define PMD_SHIFT 26 |
| 133 | #define PMD_SIZE (1UL << PMD_SHIFT) | 135 | #define PMD_SIZE (1UL << PMD_SHIFT) |
| 134 | #define PMD_MASK (~(PMD_SIZE - 1)) | 136 | #define PMD_MASK (~(PMD_SIZE - 1)) |
diff --git a/arch/m32r/include/asm/pgtable-2level.h b/arch/m32r/include/asm/pgtable-2level.h index 8fd8ee70266a..421e6ba3a173 100644 --- a/arch/m32r/include/asm/pgtable-2level.h +++ b/arch/m32r/include/asm/pgtable-2level.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | * the M32R is two-level, so we don't really have any | 13 | * the M32R is two-level, so we don't really have any |
| 14 | * PMD directory physically. | 14 | * PMD directory physically. |
| 15 | */ | 15 | */ |
| 16 | #define __PAGETABLE_PMD_FOLDED | ||
| 16 | #define PMD_SHIFT 22 | 17 | #define PMD_SHIFT 22 |
| 17 | #define PTRS_PER_PMD 1 | 18 | #define PTRS_PER_PMD 1 |
| 18 | 19 | ||
diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgtable_mm.h index 28a145bfbb71..35ed4a9981ae 100644 --- a/arch/m68k/include/asm/pgtable_mm.h +++ b/arch/m68k/include/asm/pgtable_mm.h | |||
| @@ -54,10 +54,12 @@ | |||
| 54 | */ | 54 | */ |
| 55 | #ifdef CONFIG_SUN3 | 55 | #ifdef CONFIG_SUN3 |
| 56 | #define PTRS_PER_PTE 16 | 56 | #define PTRS_PER_PTE 16 |
| 57 | #define __PAGETABLE_PMD_FOLDED | ||
| 57 | #define PTRS_PER_PMD 1 | 58 | #define PTRS_PER_PMD 1 |
| 58 | #define PTRS_PER_PGD 2048 | 59 | #define PTRS_PER_PGD 2048 |
| 59 | #elif defined(CONFIG_COLDFIRE) | 60 | #elif defined(CONFIG_COLDFIRE) |
| 60 | #define PTRS_PER_PTE 512 | 61 | #define PTRS_PER_PTE 512 |
| 62 | #define __PAGETABLE_PMD_FOLDED | ||
| 61 | #define PTRS_PER_PMD 1 | 63 | #define PTRS_PER_PMD 1 |
| 62 | #define PTRS_PER_PGD 1024 | 64 | #define PTRS_PER_PGD 1024 |
| 63 | #else | 65 | #else |
diff --git a/arch/mn10300/include/asm/pgtable.h b/arch/mn10300/include/asm/pgtable.h index afab728ab65e..96d3f9deb59c 100644 --- a/arch/mn10300/include/asm/pgtable.h +++ b/arch/mn10300/include/asm/pgtable.h | |||
| @@ -56,7 +56,9 @@ extern void paging_init(void); | |||
| 56 | #define PGDIR_SHIFT 22 | 56 | #define PGDIR_SHIFT 22 |
| 57 | #define PTRS_PER_PGD 1024 | 57 | #define PTRS_PER_PGD 1024 |
| 58 | #define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ | 58 | #define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ |
| 59 | #define __PAGETABLE_PUD_FOLDED | ||
| 59 | #define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ | 60 | #define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ |
| 61 | #define __PAGETABLE_PMD_FOLDED | ||
| 60 | #define PTRS_PER_PTE 1024 | 62 | #define PTRS_PER_PTE 1024 |
| 61 | 63 | ||
| 62 | #define PGD_SIZE PAGE_SIZE | 64 | #define PGD_SIZE PAGE_SIZE |
diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h index 8c966b2270aa..15207b9362bf 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h | |||
| @@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long); | |||
| 96 | #if PT_NLEVELS == 3 | 96 | #if PT_NLEVELS == 3 |
| 97 | #define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) | 97 | #define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) |
| 98 | #else | 98 | #else |
| 99 | #define __PAGETABLE_PMD_FOLDED | ||
| 99 | #define BITS_PER_PMD 0 | 100 | #define BITS_PER_PMD 0 |
| 100 | #endif | 101 | #endif |
| 101 | #define PTRS_PER_PMD (1UL << BITS_PER_PMD) | 102 | #define PTRS_PER_PMD (1UL << BITS_PER_PMD) |
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index fbb5ee3ae57c..e08ec38f8c6e 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
| @@ -91,7 +91,9 @@ extern unsigned long zero_page_mask; | |||
| 91 | */ | 91 | */ |
| 92 | #define PTRS_PER_PTE 256 | 92 | #define PTRS_PER_PTE 256 |
| 93 | #ifndef CONFIG_64BIT | 93 | #ifndef CONFIG_64BIT |
| 94 | #define __PAGETABLE_PUD_FOLDED | ||
| 94 | #define PTRS_PER_PMD 1 | 95 | #define PTRS_PER_PMD 1 |
| 96 | #define __PAGETABLE_PMD_FOLDED | ||
| 95 | #define PTRS_PER_PUD 1 | 97 | #define PTRS_PER_PUD 1 |
| 96 | #else /* CONFIG_64BIT */ | 98 | #else /* CONFIG_64BIT */ |
| 97 | #define PTRS_PER_PMD 2048 | 99 | #define PTRS_PER_PMD 2048 |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 000d4199b03e..31e2d5bf3e38 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -982,6 +982,9 @@ ENTRY(xen_hypervisor_callback) | |||
| 982 | ENTRY(xen_do_upcall) | 982 | ENTRY(xen_do_upcall) |
| 983 | 1: mov %esp, %eax | 983 | 1: mov %esp, %eax |
| 984 | call xen_evtchn_do_upcall | 984 | call xen_evtchn_do_upcall |
| 985 | #ifndef CONFIG_PREEMPT | ||
| 986 | call xen_maybe_preempt_hcall | ||
| 987 | #endif | ||
| 985 | jmp ret_from_intr | 988 | jmp ret_from_intr |
| 986 | CFI_ENDPROC | 989 | CFI_ENDPROC |
| 987 | ENDPROC(xen_hypervisor_callback) | 990 | ENDPROC(xen_hypervisor_callback) |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index db13655c3a2a..10074ad9ebf8 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
| @@ -1208,6 +1208,9 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) | |||
| 1208 | popq %rsp | 1208 | popq %rsp |
| 1209 | CFI_DEF_CFA_REGISTER rsp | 1209 | CFI_DEF_CFA_REGISTER rsp |
| 1210 | decl PER_CPU_VAR(irq_count) | 1210 | decl PER_CPU_VAR(irq_count) |
| 1211 | #ifndef CONFIG_PREEMPT | ||
| 1212 | call xen_maybe_preempt_hcall | ||
| 1213 | #endif | ||
| 1211 | jmp error_exit | 1214 | jmp error_exit |
| 1212 | CFI_ENDPROC | 1215 | CFI_ENDPROC |
| 1213 | END(xen_do_hypervisor_callback) | 1216 | END(xen_do_hypervisor_callback) |
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index 4a0890f815c4..08f41caada45 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config LGUEST_GUEST | 1 | config LGUEST_GUEST |
| 2 | bool "Lguest guest support" | 2 | bool "Lguest guest support" |
| 3 | depends on X86_32 && PARAVIRT | 3 | depends on X86_32 && PARAVIRT && PCI |
| 4 | select TTY | 4 | select TTY |
| 5 | select VIRTUALIZATION | 5 | select VIRTUALIZATION |
| 6 | select VIRTIO | 6 | select VIRTIO |
| @@ -8,7 +8,7 @@ config LGUEST_GUEST | |||
| 8 | help | 8 | help |
| 9 | Lguest is a tiny in-kernel hypervisor. Selecting this will | 9 | Lguest is a tiny in-kernel hypervisor. Selecting this will |
| 10 | allow your kernel to boot under lguest. This option will increase | 10 | allow your kernel to boot under lguest. This option will increase |
| 11 | your kernel size by about 6k. If in doubt, say N. | 11 | your kernel size by about 10k. If in doubt, say N. |
| 12 | 12 | ||
| 13 | If you say Y here, make sure you say Y (or M) to the virtio block | 13 | If you say Y here, make sure you say Y (or M) to the virtio block |
| 14 | and net drivers which lguest needs. | 14 | and net drivers which lguest needs. |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index bd8b8459c3d0..5240f563076d 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -1070,6 +1070,23 @@ static inline void xen_write_cr8(unsigned long val) | |||
| 1070 | BUG_ON(val); | 1070 | BUG_ON(val); |
| 1071 | } | 1071 | } |
| 1072 | #endif | 1072 | #endif |
| 1073 | |||
| 1074 | static u64 xen_read_msr_safe(unsigned int msr, int *err) | ||
| 1075 | { | ||
| 1076 | u64 val; | ||
| 1077 | |||
| 1078 | val = native_read_msr_safe(msr, err); | ||
| 1079 | switch (msr) { | ||
| 1080 | case MSR_IA32_APICBASE: | ||
| 1081 | #ifdef CONFIG_X86_X2APIC | ||
| 1082 | if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31)))) | ||
| 1083 | #endif | ||
| 1084 | val &= ~X2APIC_ENABLE; | ||
| 1085 | break; | ||
| 1086 | } | ||
| 1087 | return val; | ||
| 1088 | } | ||
| 1089 | |||
| 1073 | static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high) | 1090 | static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high) |
| 1074 | { | 1091 | { |
| 1075 | int ret; | 1092 | int ret; |
| @@ -1240,7 +1257,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { | |||
| 1240 | 1257 | ||
| 1241 | .wbinvd = native_wbinvd, | 1258 | .wbinvd = native_wbinvd, |
| 1242 | 1259 | ||
| 1243 | .read_msr = native_read_msr_safe, | 1260 | .read_msr = xen_read_msr_safe, |
| 1244 | .write_msr = xen_write_msr_safe, | 1261 | .write_msr = xen_write_msr_safe, |
| 1245 | 1262 | ||
| 1246 | .read_tsc = native_read_tsc, | 1263 | .read_tsc = native_read_tsc, |
| @@ -1741,6 +1758,7 @@ asmlinkage __visible void __init xen_start_kernel(void) | |||
| 1741 | #ifdef CONFIG_X86_32 | 1758 | #ifdef CONFIG_X86_32 |
| 1742 | i386_start_kernel(); | 1759 | i386_start_kernel(); |
| 1743 | #else | 1760 | #else |
| 1761 | cr4_init_shadow(); /* 32b kernel does this in i386_start_kernel() */ | ||
| 1744 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); | 1762 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); |
| 1745 | #endif | 1763 | #endif |
| 1746 | } | 1764 | } |
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c index b64bccbb78c9..ceb32dd52a6c 100644 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c | |||
| @@ -482,6 +482,7 @@ static int nvme_error_status(u16 status) | |||
| 482 | } | 482 | } |
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | #ifdef CONFIG_BLK_DEV_INTEGRITY | ||
| 485 | static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi) | 486 | static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi) |
| 486 | { | 487 | { |
| 487 | if (be32_to_cpu(pi->ref_tag) == v) | 488 | if (be32_to_cpu(pi->ref_tag) == v) |
| @@ -538,6 +539,58 @@ static void nvme_dif_remap(struct request *req, | |||
| 538 | kunmap_atomic(pmap); | 539 | kunmap_atomic(pmap); |
| 539 | } | 540 | } |
| 540 | 541 | ||
| 542 | static int nvme_noop_verify(struct blk_integrity_iter *iter) | ||
| 543 | { | ||
| 544 | return 0; | ||
| 545 | } | ||
| 546 | |||
| 547 | static int nvme_noop_generate(struct blk_integrity_iter *iter) | ||
| 548 | { | ||
| 549 | return 0; | ||
| 550 | } | ||
| 551 | |||
| 552 | struct blk_integrity nvme_meta_noop = { | ||
| 553 | .name = "NVME_META_NOOP", | ||
| 554 | .generate_fn = nvme_noop_generate, | ||
| 555 | .verify_fn = nvme_noop_verify, | ||
| 556 | }; | ||
| 557 | |||
| 558 | static void nvme_init_integrity(struct nvme_ns *ns) | ||
| 559 | { | ||
| 560 | struct blk_integrity integrity; | ||
| 561 | |||
| 562 | switch (ns->pi_type) { | ||
| 563 | case NVME_NS_DPS_PI_TYPE3: | ||
| 564 | integrity = t10_pi_type3_crc; | ||
| 565 | break; | ||
| 566 | case NVME_NS_DPS_PI_TYPE1: | ||
| 567 | case NVME_NS_DPS_PI_TYPE2: | ||
| 568 | integrity = t10_pi_type1_crc; | ||
| 569 | break; | ||
| 570 | default: | ||
| 571 | integrity = nvme_meta_noop; | ||
| 572 | break; | ||
| 573 | } | ||
| 574 | integrity.tuple_size = ns->ms; | ||
| 575 | blk_integrity_register(ns->disk, &integrity); | ||
| 576 | blk_queue_max_integrity_segments(ns->queue, 1); | ||
| 577 | } | ||
| 578 | #else /* CONFIG_BLK_DEV_INTEGRITY */ | ||
| 579 | static void nvme_dif_remap(struct request *req, | ||
| 580 | void (*dif_swap)(u32 p, u32 v, struct t10_pi_tuple *pi)) | ||
| 581 | { | ||
| 582 | } | ||
| 583 | static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi) | ||
| 584 | { | ||
| 585 | } | ||
| 586 | static void nvme_dif_complete(u32 p, u32 v, struct t10_pi_tuple *pi) | ||
| 587 | { | ||
| 588 | } | ||
| 589 | static void nvme_init_integrity(struct nvme_ns *ns) | ||
| 590 | { | ||
| 591 | } | ||
| 592 | #endif | ||
| 593 | |||
| 541 | static void req_completion(struct nvme_queue *nvmeq, void *ctx, | 594 | static void req_completion(struct nvme_queue *nvmeq, void *ctx, |
| 542 | struct nvme_completion *cqe) | 595 | struct nvme_completion *cqe) |
| 543 | { | 596 | { |
| @@ -1959,43 +2012,6 @@ static void nvme_config_discard(struct nvme_ns *ns) | |||
| 1959 | queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue); | 2012 | queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue); |
| 1960 | } | 2013 | } |
| 1961 | 2014 | ||
| 1962 | static int nvme_noop_verify(struct blk_integrity_iter *iter) | ||
| 1963 | { | ||
| 1964 | return 0; | ||
| 1965 | } | ||
| 1966 | |||
| 1967 | static int nvme_noop_generate(struct blk_integrity_iter *iter) | ||
| 1968 | { | ||
| 1969 | return 0; | ||
| 1970 | } | ||
| 1971 | |||
| 1972 | struct blk_integrity nvme_meta_noop = { | ||
| 1973 | .name = "NVME_META_NOOP", | ||
| 1974 | .generate_fn = nvme_noop_generate, | ||
| 1975 | .verify_fn = nvme_noop_verify, | ||
| 1976 | }; | ||
| 1977 | |||
| 1978 | static void nvme_init_integrity(struct nvme_ns *ns) | ||
| 1979 | { | ||
| 1980 | struct blk_integrity integrity; | ||
| 1981 | |||
| 1982 | switch (ns->pi_type) { | ||
| 1983 | case NVME_NS_DPS_PI_TYPE3: | ||
| 1984 | integrity = t10_pi_type3_crc; | ||
| 1985 | break; | ||
| 1986 | case NVME_NS_DPS_PI_TYPE1: | ||
| 1987 | case NVME_NS_DPS_PI_TYPE2: | ||
| 1988 | integrity = t10_pi_type1_crc; | ||
| 1989 | break; | ||
| 1990 | default: | ||
| 1991 | integrity = nvme_meta_noop; | ||
| 1992 | break; | ||
| 1993 | } | ||
| 1994 | integrity.tuple_size = ns->ms; | ||
| 1995 | blk_integrity_register(ns->disk, &integrity); | ||
| 1996 | blk_queue_max_integrity_segments(ns->queue, 1); | ||
| 1997 | } | ||
| 1998 | |||
| 1999 | static int nvme_revalidate_disk(struct gendisk *disk) | 2015 | static int nvme_revalidate_disk(struct gendisk *disk) |
| 2000 | { | 2016 | { |
| 2001 | struct nvme_ns *ns = disk->private_data; | 2017 | struct nvme_ns *ns = disk->private_data; |
| @@ -2036,7 +2052,8 @@ static int nvme_revalidate_disk(struct gendisk *disk) | |||
| 2036 | pi_type = ns->ms == sizeof(struct t10_pi_tuple) ? | 2052 | pi_type = ns->ms == sizeof(struct t10_pi_tuple) ? |
| 2037 | id->dps & NVME_NS_DPS_PI_MASK : 0; | 2053 | id->dps & NVME_NS_DPS_PI_MASK : 0; |
| 2038 | 2054 | ||
| 2039 | if (disk->integrity && (ns->pi_type != pi_type || ns->ms != old_ms || | 2055 | if (blk_get_integrity(disk) && (ns->pi_type != pi_type || |
| 2056 | ns->ms != old_ms || | ||
| 2040 | bs != queue_logical_block_size(disk->queue) || | 2057 | bs != queue_logical_block_size(disk->queue) || |
| 2041 | (ns->ms && id->flbas & NVME_NS_FLBAS_META_EXT))) | 2058 | (ns->ms && id->flbas & NVME_NS_FLBAS_META_EXT))) |
| 2042 | blk_integrity_unregister(disk); | 2059 | blk_integrity_unregister(disk); |
| @@ -2044,11 +2061,11 @@ static int nvme_revalidate_disk(struct gendisk *disk) | |||
| 2044 | ns->pi_type = pi_type; | 2061 | ns->pi_type = pi_type; |
| 2045 | blk_queue_logical_block_size(ns->queue, bs); | 2062 | blk_queue_logical_block_size(ns->queue, bs); |
| 2046 | 2063 | ||
| 2047 | if (ns->ms && !disk->integrity && (disk->flags & GENHD_FL_UP) && | 2064 | if (ns->ms && !blk_get_integrity(disk) && (disk->flags & GENHD_FL_UP) && |
| 2048 | !(id->flbas & NVME_NS_FLBAS_META_EXT)) | 2065 | !(id->flbas & NVME_NS_FLBAS_META_EXT)) |
| 2049 | nvme_init_integrity(ns); | 2066 | nvme_init_integrity(ns); |
| 2050 | 2067 | ||
| 2051 | if (id->ncap == 0 || (ns->ms && !disk->integrity)) | 2068 | if (id->ncap == 0 || (ns->ms && !blk_get_integrity(disk))) |
| 2052 | set_capacity(disk, 0); | 2069 | set_capacity(disk, 0); |
| 2053 | else | 2070 | else |
| 2054 | set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9)); | 2071 | set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9)); |
| @@ -2652,7 +2669,7 @@ static void nvme_dev_remove(struct nvme_dev *dev) | |||
| 2652 | 2669 | ||
| 2653 | list_for_each_entry(ns, &dev->namespaces, list) { | 2670 | list_for_each_entry(ns, &dev->namespaces, list) { |
| 2654 | if (ns->disk->flags & GENHD_FL_UP) { | 2671 | if (ns->disk->flags & GENHD_FL_UP) { |
| 2655 | if (ns->disk->integrity) | 2672 | if (blk_get_integrity(ns->disk)) |
| 2656 | blk_integrity_unregister(ns->disk); | 2673 | blk_integrity_unregister(ns->disk); |
| 2657 | del_gendisk(ns->disk); | 2674 | del_gendisk(ns->disk); |
| 2658 | } | 2675 | } |
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 8e233edd7a09..871bd3550cb0 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c | |||
| @@ -528,7 +528,7 @@ out_cleanup: | |||
| 528 | static inline void update_used_max(struct zram *zram, | 528 | static inline void update_used_max(struct zram *zram, |
| 529 | const unsigned long pages) | 529 | const unsigned long pages) |
| 530 | { | 530 | { |
| 531 | int old_max, cur_max; | 531 | unsigned long old_max, cur_max; |
| 532 | 532 | ||
| 533 | old_max = atomic_long_read(&zram->stats.max_used_pages); | 533 | old_max = atomic_long_read(&zram->stats.max_used_pages); |
| 534 | 534 | ||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index db4fb6e1cc5b..7c669c328c4c 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1872,6 +1872,7 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
| 1872 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, | 1872 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, |
| 1873 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) }, | 1873 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) }, |
| 1874 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) }, | 1874 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) }, |
| 1875 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K) }, | ||
| 1875 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) }, | 1876 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) }, |
| 1876 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) }, | 1877 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) }, |
| 1877 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) }, | 1878 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) }, |
| @@ -1926,6 +1927,7 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
| 1926 | #endif | 1927 | #endif |
| 1927 | #if IS_ENABLED(CONFIG_HID_SAITEK) | 1928 | #if IS_ENABLED(CONFIG_HID_SAITEK) |
| 1928 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) }, | 1929 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) }, |
| 1930 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD) }, | ||
| 1929 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) }, | 1931 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) }, |
| 1930 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) }, | 1932 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) }, |
| 1931 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) }, | 1933 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) }, |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 46edb4d3ed28..204312bfab2c 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -654,6 +654,7 @@ | |||
| 654 | #define USB_DEVICE_ID_MS_LK6K 0x00f9 | 654 | #define USB_DEVICE_ID_MS_LK6K 0x00f9 |
| 655 | #define USB_DEVICE_ID_MS_PRESENTER_8K_BT 0x0701 | 655 | #define USB_DEVICE_ID_MS_PRESENTER_8K_BT 0x0701 |
| 656 | #define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713 | 656 | #define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713 |
| 657 | #define USB_DEVICE_ID_MS_NE7K 0x071d | ||
| 657 | #define USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K 0x0730 | 658 | #define USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K 0x0730 |
| 658 | #define USB_DEVICE_ID_MS_COMFORT_MOUSE_4500 0x076c | 659 | #define USB_DEVICE_ID_MS_COMFORT_MOUSE_4500 0x076c |
| 659 | #define USB_DEVICE_ID_MS_SURFACE_PRO_2 0x0799 | 660 | #define USB_DEVICE_ID_MS_SURFACE_PRO_2 0x0799 |
| @@ -802,6 +803,7 @@ | |||
| 802 | #define USB_VENDOR_ID_SAITEK 0x06a3 | 803 | #define USB_VENDOR_ID_SAITEK 0x06a3 |
| 803 | #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 | 804 | #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 |
| 804 | #define USB_DEVICE_ID_SAITEK_PS1000 0x0621 | 805 | #define USB_DEVICE_ID_SAITEK_PS1000 0x0621 |
| 806 | #define USB_DEVICE_ID_SAITEK_RAT7_OLD 0x0ccb | ||
| 805 | #define USB_DEVICE_ID_SAITEK_RAT7 0x0cd7 | 807 | #define USB_DEVICE_ID_SAITEK_RAT7 0x0cd7 |
| 806 | #define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0 | 808 | #define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0 |
| 807 | 809 | ||
diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c index fbaea6eb882e..af935eb198c9 100644 --- a/drivers/hid/hid-microsoft.c +++ b/drivers/hid/hid-microsoft.c | |||
| @@ -264,6 +264,8 @@ static const struct hid_device_id ms_devices[] = { | |||
| 264 | .driver_data = MS_ERGONOMY }, | 264 | .driver_data = MS_ERGONOMY }, |
| 265 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP), | 265 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP), |
| 266 | .driver_data = MS_ERGONOMY }, | 266 | .driver_data = MS_ERGONOMY }, |
| 267 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K), | ||
| 268 | .driver_data = MS_ERGONOMY }, | ||
| 267 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K), | 269 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K), |
| 268 | .driver_data = MS_ERGONOMY | MS_RDESC }, | 270 | .driver_data = MS_ERGONOMY | MS_RDESC }, |
| 269 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB), | 271 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB), |
diff --git a/drivers/hid/hid-saitek.c b/drivers/hid/hid-saitek.c index 5632c54eadf0..a014f21275d8 100644 --- a/drivers/hid/hid-saitek.c +++ b/drivers/hid/hid-saitek.c | |||
| @@ -177,6 +177,8 @@ static int saitek_event(struct hid_device *hdev, struct hid_field *field, | |||
| 177 | static const struct hid_device_id saitek_devices[] = { | 177 | static const struct hid_device_id saitek_devices[] = { |
| 178 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000), | 178 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000), |
| 179 | .driver_data = SAITEK_FIX_PS1000 }, | 179 | .driver_data = SAITEK_FIX_PS1000 }, |
| 180 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD), | ||
| 181 | .driver_data = SAITEK_RELEASE_MODE_RAT7 }, | ||
| 180 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7), | 182 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7), |
| 181 | .driver_data = SAITEK_RELEASE_MODE_RAT7 }, | 183 | .driver_data = SAITEK_RELEASE_MODE_RAT7 }, |
| 182 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9), | 184 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9), |
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c index 6a58b6c723aa..e54ce1097e2c 100644 --- a/drivers/hid/hid-sensor-hub.c +++ b/drivers/hid/hid-sensor-hub.c | |||
| @@ -135,8 +135,9 @@ static struct hid_sensor_hub_callbacks *sensor_hub_get_callback( | |||
| 135 | { | 135 | { |
| 136 | struct hid_sensor_hub_callbacks_list *callback; | 136 | struct hid_sensor_hub_callbacks_list *callback; |
| 137 | struct sensor_hub_data *pdata = hid_get_drvdata(hdev); | 137 | struct sensor_hub_data *pdata = hid_get_drvdata(hdev); |
| 138 | unsigned long flags; | ||
| 138 | 139 | ||
| 139 | spin_lock(&pdata->dyn_callback_lock); | 140 | spin_lock_irqsave(&pdata->dyn_callback_lock, flags); |
| 140 | list_for_each_entry(callback, &pdata->dyn_callback_list, list) | 141 | list_for_each_entry(callback, &pdata->dyn_callback_list, list) |
| 141 | if (callback->usage_id == usage_id && | 142 | if (callback->usage_id == usage_id && |
| 142 | (collection_index >= | 143 | (collection_index >= |
| @@ -145,10 +146,11 @@ static struct hid_sensor_hub_callbacks *sensor_hub_get_callback( | |||
| 145 | callback->hsdev->end_collection_index)) { | 146 | callback->hsdev->end_collection_index)) { |
| 146 | *priv = callback->priv; | 147 | *priv = callback->priv; |
| 147 | *hsdev = callback->hsdev; | 148 | *hsdev = callback->hsdev; |
| 148 | spin_unlock(&pdata->dyn_callback_lock); | 149 | spin_unlock_irqrestore(&pdata->dyn_callback_lock, |
| 150 | flags); | ||
| 149 | return callback->usage_callback; | 151 | return callback->usage_callback; |
| 150 | } | 152 | } |
| 151 | spin_unlock(&pdata->dyn_callback_lock); | 153 | spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags); |
| 152 | 154 | ||
| 153 | return NULL; | 155 | return NULL; |
| 154 | } | 156 | } |
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index 31e9d2561106..1896c019e302 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c | |||
| @@ -804,7 +804,7 @@ union sixaxis_output_report_01 { | |||
| 804 | #define DS4_REPORT_0x81_SIZE 7 | 804 | #define DS4_REPORT_0x81_SIZE 7 |
| 805 | #define SIXAXIS_REPORT_0xF2_SIZE 18 | 805 | #define SIXAXIS_REPORT_0xF2_SIZE 18 |
| 806 | 806 | ||
| 807 | static spinlock_t sony_dev_list_lock; | 807 | static DEFINE_SPINLOCK(sony_dev_list_lock); |
| 808 | static LIST_HEAD(sony_device_list); | 808 | static LIST_HEAD(sony_device_list); |
| 809 | static DEFINE_IDA(sony_device_id_allocator); | 809 | static DEFINE_IDA(sony_device_id_allocator); |
| 810 | 810 | ||
| @@ -1944,6 +1944,8 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
| 1944 | return -ENOMEM; | 1944 | return -ENOMEM; |
| 1945 | } | 1945 | } |
| 1946 | 1946 | ||
| 1947 | spin_lock_init(&sc->lock); | ||
| 1948 | |||
| 1947 | sc->quirks = quirks; | 1949 | sc->quirks = quirks; |
| 1948 | hid_set_drvdata(hdev, sc); | 1950 | hid_set_drvdata(hdev, sc); |
| 1949 | sc->hdev = hdev; | 1951 | sc->hdev = hdev; |
| @@ -2147,8 +2149,8 @@ static void __exit sony_exit(void) | |||
| 2147 | { | 2149 | { |
| 2148 | dbg_hid("Sony:%s\n", __func__); | 2150 | dbg_hid("Sony:%s\n", __func__); |
| 2149 | 2151 | ||
| 2150 | ida_destroy(&sony_device_id_allocator); | ||
| 2151 | hid_unregister_driver(&sony_driver); | 2152 | hid_unregister_driver(&sony_driver); |
| 2153 | ida_destroy(&sony_device_id_allocator); | ||
| 2152 | } | 2154 | } |
| 2153 | module_init(sony_init); | 2155 | module_init(sony_init); |
| 2154 | module_exit(sony_exit); | 2156 | module_exit(sony_exit); |
diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c index d43e967e7533..36053f33d6d9 100644 --- a/drivers/hid/i2c-hid/i2c-hid.c +++ b/drivers/hid/i2c-hid/i2c-hid.c | |||
| @@ -370,7 +370,10 @@ static int i2c_hid_hwreset(struct i2c_client *client) | |||
| 370 | static void i2c_hid_get_input(struct i2c_hid *ihid) | 370 | static void i2c_hid_get_input(struct i2c_hid *ihid) |
| 371 | { | 371 | { |
| 372 | int ret, ret_size; | 372 | int ret, ret_size; |
| 373 | int size = ihid->bufsize; | 373 | int size = le16_to_cpu(ihid->hdesc.wMaxInputLength); |
| 374 | |||
| 375 | if (size > ihid->bufsize) | ||
| 376 | size = ihid->bufsize; | ||
| 374 | 377 | ||
| 375 | ret = i2c_master_recv(ihid->client, ihid->inbuf, size); | 378 | ret = i2c_master_recv(ihid->client, ihid->inbuf, size); |
| 376 | if (ret != size) { | 379 | if (ret != size) { |
| @@ -785,7 +788,7 @@ static int i2c_hid_init_irq(struct i2c_client *client) | |||
| 785 | dev_dbg(&client->dev, "Requesting IRQ: %d\n", client->irq); | 788 | dev_dbg(&client->dev, "Requesting IRQ: %d\n", client->irq); |
| 786 | 789 | ||
| 787 | ret = request_threaded_irq(client->irq, NULL, i2c_hid_irq, | 790 | ret = request_threaded_irq(client->irq, NULL, i2c_hid_irq, |
| 788 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, | 791 | IRQF_TRIGGER_LOW | IRQF_ONESHOT, |
| 789 | client->name, ihid); | 792 | client->name, ihid); |
| 790 | if (ret < 0) { | 793 | if (ret < 0) { |
| 791 | dev_warn(&client->dev, | 794 | dev_warn(&client->dev, |
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 1a6507999a65..046351cf17f3 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c | |||
| @@ -778,6 +778,11 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
| 778 | input_report_abs(input, ABS_X, be16_to_cpup((__be16 *)&data[4])); | 778 | input_report_abs(input, ABS_X, be16_to_cpup((__be16 *)&data[4])); |
| 779 | input_report_abs(input, ABS_Y, be16_to_cpup((__be16 *)&data[6])); | 779 | input_report_abs(input, ABS_Y, be16_to_cpup((__be16 *)&data[6])); |
| 780 | input_report_abs(input, ABS_Z, be16_to_cpup((__be16 *)&data[8])); | 780 | input_report_abs(input, ABS_Z, be16_to_cpup((__be16 *)&data[8])); |
| 781 | if ((data[2] & 0x07) | data[4] | data[5] | data[6] | data[7] | data[8] | data[9]) { | ||
| 782 | input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); | ||
| 783 | } else { | ||
| 784 | input_report_abs(input, ABS_MISC, 0); | ||
| 785 | } | ||
| 781 | } else if (features->type == CINTIQ_HYBRID) { | 786 | } else if (features->type == CINTIQ_HYBRID) { |
| 782 | /* | 787 | /* |
| 783 | * Do not send hardware buttons under Android. They | 788 | * Do not send hardware buttons under Android. They |
| @@ -2725,9 +2730,9 @@ static const struct wacom_features wacom_features_0xF6 = | |||
| 2725 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf8, .touch_max = 10, | 2730 | .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf8, .touch_max = 10, |
| 2726 | .check_for_hid_type = true, .hid_type = HID_TYPE_USBNONE }; | 2731 | .check_for_hid_type = true, .hid_type = HID_TYPE_USBNONE }; |
| 2727 | static const struct wacom_features wacom_features_0x32A = | 2732 | static const struct wacom_features wacom_features_0x32A = |
| 2728 | { "Wacom Cintiq 27QHD", 119740, 67520, 2047, | 2733 | { "Wacom Cintiq 27QHD", 119740, 67520, 2047, 63, |
| 2729 | 63, WACOM_27QHD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, | 2734 | WACOM_27QHD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, |
| 2730 | WACOM_27QHD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 2735 | WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; |
| 2731 | static const struct wacom_features wacom_features_0x32B = | 2736 | static const struct wacom_features wacom_features_0x32B = |
| 2732 | { "Wacom Cintiq 27QHD touch", 119740, 67520, 2047, 63, | 2737 | { "Wacom Cintiq 27QHD touch", 119740, 67520, 2047, 63, |
| 2733 | WACOM_27QHD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, | 2738 | WACOM_27QHD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, |
diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c index bce4e9ff21bf..6c99ee7bafa3 100644 --- a/drivers/hwmon/ads7828.c +++ b/drivers/hwmon/ads7828.c | |||
| @@ -147,6 +147,9 @@ static int ads7828_probe(struct i2c_client *client, | |||
| 147 | &ads2830_regmap_config); | 147 | &ads2830_regmap_config); |
| 148 | } | 148 | } |
| 149 | 149 | ||
| 150 | if (IS_ERR(data->regmap)) | ||
| 151 | return PTR_ERR(data->regmap); | ||
| 152 | |||
| 150 | data->cmd_byte = ext_vref ? ADS7828_CMD_PD1 : ADS7828_CMD_PD3; | 153 | data->cmd_byte = ext_vref ? ADS7828_CMD_PD1 : ADS7828_CMD_PD3; |
| 151 | if (!diff_input) | 154 | if (!diff_input) |
| 152 | data->cmd_byte |= ADS7828_CMD_SD_SE; | 155 | data->cmd_byte |= ADS7828_CMD_SD_SE; |
diff --git a/drivers/rtc/rtc-ds1685.c b/drivers/rtc/rtc-ds1685.c index 8c3bfcb115b7..803869c7d7c2 100644 --- a/drivers/rtc/rtc-ds1685.c +++ b/drivers/rtc/rtc-ds1685.c | |||
| @@ -399,21 +399,21 @@ ds1685_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 399 | * of this RTC chip. We check for it anyways in case support is | 399 | * of this RTC chip. We check for it anyways in case support is |
| 400 | * added in the future. | 400 | * added in the future. |
| 401 | */ | 401 | */ |
| 402 | if (unlikely((seconds >= 0xc0) && (seconds <= 0xff))) | 402 | if (unlikely(seconds >= 0xc0)) |
| 403 | alrm->time.tm_sec = -1; | 403 | alrm->time.tm_sec = -1; |
| 404 | else | 404 | else |
| 405 | alrm->time.tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, | 405 | alrm->time.tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, |
| 406 | RTC_SECS_BCD_MASK, | 406 | RTC_SECS_BCD_MASK, |
| 407 | RTC_SECS_BIN_MASK); | 407 | RTC_SECS_BIN_MASK); |
| 408 | 408 | ||
| 409 | if (unlikely((minutes >= 0xc0) && (minutes <= 0xff))) | 409 | if (unlikely(minutes >= 0xc0)) |
| 410 | alrm->time.tm_min = -1; | 410 | alrm->time.tm_min = -1; |
| 411 | else | 411 | else |
| 412 | alrm->time.tm_min = ds1685_rtc_bcd2bin(rtc, minutes, | 412 | alrm->time.tm_min = ds1685_rtc_bcd2bin(rtc, minutes, |
| 413 | RTC_MINS_BCD_MASK, | 413 | RTC_MINS_BCD_MASK, |
| 414 | RTC_MINS_BIN_MASK); | 414 | RTC_MINS_BIN_MASK); |
| 415 | 415 | ||
| 416 | if (unlikely((hours >= 0xc0) && (hours <= 0xff))) | 416 | if (unlikely(hours >= 0xc0)) |
| 417 | alrm->time.tm_hour = -1; | 417 | alrm->time.tm_hour = -1; |
| 418 | else | 418 | else |
| 419 | alrm->time.tm_hour = ds1685_rtc_bcd2bin(rtc, hours, | 419 | alrm->time.tm_hour = ds1685_rtc_bcd2bin(rtc, hours, |
| @@ -472,13 +472,13 @@ ds1685_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 472 | * field, and we only support four fields. We put the support | 472 | * field, and we only support four fields. We put the support |
| 473 | * here anyways for the future. | 473 | * here anyways for the future. |
| 474 | */ | 474 | */ |
| 475 | if (unlikely((seconds >= 0xc0) && (seconds <= 0xff))) | 475 | if (unlikely(seconds >= 0xc0)) |
| 476 | seconds = 0xff; | 476 | seconds = 0xff; |
| 477 | 477 | ||
| 478 | if (unlikely((minutes >= 0xc0) && (minutes <= 0xff))) | 478 | if (unlikely(minutes >= 0xc0)) |
| 479 | minutes = 0xff; | 479 | minutes = 0xff; |
| 480 | 480 | ||
| 481 | if (unlikely((hours >= 0xc0) && (hours <= 0xff))) | 481 | if (unlikely(hours >= 0xc0)) |
| 482 | hours = 0xff; | 482 | hours = 0xff; |
| 483 | 483 | ||
| 484 | alrm->time.tm_mon = -1; | 484 | alrm->time.tm_mon = -1; |
| @@ -528,7 +528,6 @@ ds1685_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 528 | /* ----------------------------------------------------------------------- */ | 528 | /* ----------------------------------------------------------------------- */ |
| 529 | /* /dev/rtcX Interface functions */ | 529 | /* /dev/rtcX Interface functions */ |
| 530 | 530 | ||
| 531 | #ifdef CONFIG_RTC_INTF_DEV | ||
| 532 | /** | 531 | /** |
| 533 | * ds1685_rtc_alarm_irq_enable - replaces ioctl() RTC_AIE on/off. | 532 | * ds1685_rtc_alarm_irq_enable - replaces ioctl() RTC_AIE on/off. |
| 534 | * @dev: pointer to device structure. | 533 | * @dev: pointer to device structure. |
| @@ -557,7 +556,6 @@ ds1685_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | |||
| 557 | 556 | ||
| 558 | return 0; | 557 | return 0; |
| 559 | } | 558 | } |
| 560 | #endif | ||
| 561 | /* ----------------------------------------------------------------------- */ | 559 | /* ----------------------------------------------------------------------- */ |
| 562 | 560 | ||
| 563 | 561 | ||
| @@ -1612,7 +1610,7 @@ ds1685_rtc_sysfs_time_regs_show(struct device *dev, | |||
| 1612 | ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, false); | 1610 | ds1685_rtc_sysfs_time_regs_lookup(attr->attr.name, false); |
| 1613 | 1611 | ||
| 1614 | /* Make sure we actually matched something. */ | 1612 | /* Make sure we actually matched something. */ |
| 1615 | if (!bcd_reg_info && !bin_reg_info) | 1613 | if (!bcd_reg_info || !bin_reg_info) |
| 1616 | return -EINVAL; | 1614 | return -EINVAL; |
| 1617 | 1615 | ||
| 1618 | /* bcd_reg_info->reg == bin_reg_info->reg. */ | 1616 | /* bcd_reg_info->reg == bin_reg_info->reg. */ |
| @@ -1650,7 +1648,7 @@ ds1685_rtc_sysfs_time_regs_store(struct device *dev, | |||
| 1650 | return -EINVAL; | 1648 | return -EINVAL; |
| 1651 | 1649 | ||
| 1652 | /* Make sure we actually matched something. */ | 1650 | /* Make sure we actually matched something. */ |
| 1653 | if (!bcd_reg_info && !bin_reg_info) | 1651 | if (!bcd_reg_info || !bin_reg_info) |
| 1654 | return -EINVAL; | 1652 | return -EINVAL; |
| 1655 | 1653 | ||
| 1656 | /* Check for a valid range. */ | 1654 | /* Check for a valid range. */ |
diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c index f3ee439d6f0e..cd4c293f0dd0 100644 --- a/drivers/sh/pm_runtime.c +++ b/drivers/sh/pm_runtime.c | |||
| @@ -81,7 +81,9 @@ static int __init sh_pm_runtime_init(void) | |||
| 81 | if (!of_machine_is_compatible("renesas,emev2") && | 81 | if (!of_machine_is_compatible("renesas,emev2") && |
| 82 | !of_machine_is_compatible("renesas,r7s72100") && | 82 | !of_machine_is_compatible("renesas,r7s72100") && |
| 83 | !of_machine_is_compatible("renesas,r8a73a4") && | 83 | !of_machine_is_compatible("renesas,r8a73a4") && |
| 84 | #ifndef CONFIG_PM_GENERIC_DOMAINS_OF | ||
| 84 | !of_machine_is_compatible("renesas,r8a7740") && | 85 | !of_machine_is_compatible("renesas,r8a7740") && |
| 86 | #endif | ||
| 85 | !of_machine_is_compatible("renesas,r8a7778") && | 87 | !of_machine_is_compatible("renesas,r8a7778") && |
| 86 | !of_machine_is_compatible("renesas,r8a7779") && | 88 | !of_machine_is_compatible("renesas,r8a7779") && |
| 87 | !of_machine_is_compatible("renesas,r8a7790") && | 89 | !of_machine_is_compatible("renesas,r8a7790") && |
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile index 2140398a2a8c..2ccd3592d41f 100644 --- a/drivers/xen/Makefile +++ b/drivers/xen/Makefile | |||
| @@ -2,7 +2,7 @@ ifeq ($(filter y, $(CONFIG_ARM) $(CONFIG_ARM64)),) | |||
| 2 | obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o | 2 | obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o |
| 3 | endif | 3 | endif |
| 4 | obj-$(CONFIG_X86) += fallback.o | 4 | obj-$(CONFIG_X86) += fallback.o |
| 5 | obj-y += grant-table.o features.o balloon.o manage.o | 5 | obj-y += grant-table.o features.o balloon.o manage.o preempt.o |
| 6 | obj-y += events/ | 6 | obj-y += events/ |
| 7 | obj-y += xenbus/ | 7 | obj-y += xenbus/ |
| 8 | 8 | ||
diff --git a/drivers/xen/preempt.c b/drivers/xen/preempt.c new file mode 100644 index 000000000000..a1800c150839 --- /dev/null +++ b/drivers/xen/preempt.c | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | * Preemptible hypercalls | ||
| 3 | * | ||
| 4 | * Copyright (C) 2014 Citrix Systems R&D ltd. | ||
| 5 | * | ||
| 6 | * This source code is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License as | ||
| 8 | * published by the Free Software Foundation; either version 2 of the | ||
| 9 | * License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/sched.h> | ||
| 13 | #include <xen/xen-ops.h> | ||
| 14 | |||
| 15 | #ifndef CONFIG_PREEMPT | ||
| 16 | |||
| 17 | /* | ||
| 18 | * Some hypercalls issued by the toolstack can take many 10s of | ||
| 19 | * seconds. Allow tasks running hypercalls via the privcmd driver to | ||
| 20 | * be voluntarily preempted even if full kernel preemption is | ||
| 21 | * disabled. | ||
| 22 | * | ||
| 23 | * Such preemptible hypercalls are bracketed by | ||
| 24 | * xen_preemptible_hcall_begin() and xen_preemptible_hcall_end() | ||
| 25 | * calls. | ||
| 26 | */ | ||
| 27 | |||
| 28 | DEFINE_PER_CPU(bool, xen_in_preemptible_hcall); | ||
| 29 | EXPORT_SYMBOL_GPL(xen_in_preemptible_hcall); | ||
| 30 | |||
| 31 | asmlinkage __visible void xen_maybe_preempt_hcall(void) | ||
| 32 | { | ||
| 33 | if (unlikely(__this_cpu_read(xen_in_preemptible_hcall) | ||
| 34 | && should_resched())) { | ||
| 35 | /* | ||
| 36 | * Clear flag as we may be rescheduled on a different | ||
| 37 | * cpu. | ||
| 38 | */ | ||
| 39 | __this_cpu_write(xen_in_preemptible_hcall, false); | ||
| 40 | _cond_resched(); | ||
| 41 | __this_cpu_write(xen_in_preemptible_hcall, true); | ||
| 42 | } | ||
| 43 | } | ||
| 44 | #endif /* CONFIG_PREEMPT */ | ||
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c index 569a13b9e856..59ac71c4a043 100644 --- a/drivers/xen/privcmd.c +++ b/drivers/xen/privcmd.c | |||
| @@ -56,10 +56,12 @@ static long privcmd_ioctl_hypercall(void __user *udata) | |||
| 56 | if (copy_from_user(&hypercall, udata, sizeof(hypercall))) | 56 | if (copy_from_user(&hypercall, udata, sizeof(hypercall))) |
| 57 | return -EFAULT; | 57 | return -EFAULT; |
| 58 | 58 | ||
| 59 | xen_preemptible_hcall_begin(); | ||
| 59 | ret = privcmd_call(hypercall.op, | 60 | ret = privcmd_call(hypercall.op, |
| 60 | hypercall.arg[0], hypercall.arg[1], | 61 | hypercall.arg[0], hypercall.arg[1], |
| 61 | hypercall.arg[2], hypercall.arg[3], | 62 | hypercall.arg[2], hypercall.arg[3], |
| 62 | hypercall.arg[4]); | 63 | hypercall.arg[4]); |
| 64 | xen_preemptible_hcall_end(); | ||
| 63 | 65 | ||
| 64 | return ret; | 66 | return ret; |
| 65 | } | 67 | } |
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 61653a03a8f5..9faca6a60bb0 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c | |||
| @@ -709,12 +709,11 @@ static int prepare_pending_reqs(struct vscsibk_info *info, | |||
| 709 | static int scsiback_do_cmd_fn(struct vscsibk_info *info) | 709 | static int scsiback_do_cmd_fn(struct vscsibk_info *info) |
| 710 | { | 710 | { |
| 711 | struct vscsiif_back_ring *ring = &info->ring; | 711 | struct vscsiif_back_ring *ring = &info->ring; |
| 712 | struct vscsiif_request *ring_req; | 712 | struct vscsiif_request ring_req; |
| 713 | struct vscsibk_pend *pending_req; | 713 | struct vscsibk_pend *pending_req; |
| 714 | RING_IDX rc, rp; | 714 | RING_IDX rc, rp; |
| 715 | int err, more_to_do; | 715 | int err, more_to_do; |
| 716 | uint32_t result; | 716 | uint32_t result; |
| 717 | uint8_t act; | ||
| 718 | 717 | ||
| 719 | rc = ring->req_cons; | 718 | rc = ring->req_cons; |
| 720 | rp = ring->sring->req_prod; | 719 | rp = ring->sring->req_prod; |
| @@ -735,11 +734,10 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 735 | if (!pending_req) | 734 | if (!pending_req) |
| 736 | return 1; | 735 | return 1; |
| 737 | 736 | ||
| 738 | ring_req = RING_GET_REQUEST(ring, rc); | 737 | ring_req = *RING_GET_REQUEST(ring, rc); |
| 739 | ring->req_cons = ++rc; | 738 | ring->req_cons = ++rc; |
| 740 | 739 | ||
| 741 | act = ring_req->act; | 740 | err = prepare_pending_reqs(info, &ring_req, pending_req); |
| 742 | err = prepare_pending_reqs(info, ring_req, pending_req); | ||
| 743 | if (err) { | 741 | if (err) { |
| 744 | switch (err) { | 742 | switch (err) { |
| 745 | case -ENODEV: | 743 | case -ENODEV: |
| @@ -755,9 +753,9 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 755 | return 1; | 753 | return 1; |
| 756 | } | 754 | } |
| 757 | 755 | ||
| 758 | switch (act) { | 756 | switch (ring_req.act) { |
| 759 | case VSCSIIF_ACT_SCSI_CDB: | 757 | case VSCSIIF_ACT_SCSI_CDB: |
| 760 | if (scsiback_gnttab_data_map(ring_req, pending_req)) { | 758 | if (scsiback_gnttab_data_map(&ring_req, pending_req)) { |
| 761 | scsiback_fast_flush_area(pending_req); | 759 | scsiback_fast_flush_area(pending_req); |
| 762 | scsiback_do_resp_with_sense(NULL, | 760 | scsiback_do_resp_with_sense(NULL, |
| 763 | DRIVER_ERROR << 24, 0, pending_req); | 761 | DRIVER_ERROR << 24, 0, pending_req); |
| @@ -768,7 +766,7 @@ static int scsiback_do_cmd_fn(struct vscsibk_info *info) | |||
| 768 | break; | 766 | break; |
| 769 | case VSCSIIF_ACT_SCSI_ABORT: | 767 | case VSCSIIF_ACT_SCSI_ABORT: |
| 770 | scsiback_device_action(pending_req, TMR_ABORT_TASK, | 768 | scsiback_device_action(pending_req, TMR_ABORT_TASK, |
| 771 | ring_req->ref_rqid); | 769 | ring_req.ref_rqid); |
| 772 | break; | 770 | break; |
| 773 | case VSCSIIF_ACT_SCSI_RESET: | 771 | case VSCSIIF_ACT_SCSI_RESET: |
| 774 | scsiback_device_action(pending_req, TMR_LUN_RESET, 0); | 772 | scsiback_device_action(pending_req, TMR_LUN_RESET, 0); |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index cd4d1315aaa9..8222f6f74147 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -4903,10 +4903,17 @@ static void sort_parity_stripes(struct btrfs_bio *bbio, int num_stripes) | |||
| 4903 | static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes) | 4903 | static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes) |
| 4904 | { | 4904 | { |
| 4905 | struct btrfs_bio *bbio = kzalloc( | 4905 | struct btrfs_bio *bbio = kzalloc( |
| 4906 | /* the size of the btrfs_bio */ | ||
| 4906 | sizeof(struct btrfs_bio) + | 4907 | sizeof(struct btrfs_bio) + |
| 4908 | /* plus the variable array for the stripes */ | ||
| 4907 | sizeof(struct btrfs_bio_stripe) * (total_stripes) + | 4909 | sizeof(struct btrfs_bio_stripe) * (total_stripes) + |
| 4910 | /* plus the variable array for the tgt dev */ | ||
| 4908 | sizeof(int) * (real_stripes) + | 4911 | sizeof(int) * (real_stripes) + |
| 4909 | sizeof(u64) * (real_stripes), | 4912 | /* |
| 4913 | * plus the raid_map, which includes both the tgt dev | ||
| 4914 | * and the stripes | ||
| 4915 | */ | ||
| 4916 | sizeof(u64) * (total_stripes), | ||
| 4910 | GFP_NOFS); | 4917 | GFP_NOFS); |
| 4911 | if (!bbio) | 4918 | if (!bbio) |
| 4912 | return NULL; | 4919 | return NULL; |
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index b2e3ff347620..ecdbae19a766 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c | |||
| @@ -31,6 +31,8 @@ | |||
| 31 | #include "alloc.h" | 31 | #include "alloc.h" |
| 32 | #include "dat.h" | 32 | #include "dat.h" |
| 33 | 33 | ||
| 34 | static void __nilfs_btree_init(struct nilfs_bmap *bmap); | ||
| 35 | |||
| 34 | static struct nilfs_btree_path *nilfs_btree_alloc_path(void) | 36 | static struct nilfs_btree_path *nilfs_btree_alloc_path(void) |
| 35 | { | 37 | { |
| 36 | struct nilfs_btree_path *path; | 38 | struct nilfs_btree_path *path; |
| @@ -368,6 +370,34 @@ static int nilfs_btree_node_broken(const struct nilfs_btree_node *node, | |||
| 368 | return ret; | 370 | return ret; |
| 369 | } | 371 | } |
| 370 | 372 | ||
| 373 | /** | ||
| 374 | * nilfs_btree_root_broken - verify consistency of btree root node | ||
| 375 | * @node: btree root node to be examined | ||
| 376 | * @ino: inode number | ||
| 377 | * | ||
| 378 | * Return Value: If node is broken, 1 is returned. Otherwise, 0 is returned. | ||
| 379 | */ | ||
| 380 | static int nilfs_btree_root_broken(const struct nilfs_btree_node *node, | ||
| 381 | unsigned long ino) | ||
| 382 | { | ||
| 383 | int level, flags, nchildren; | ||
| 384 | int ret = 0; | ||
| 385 | |||
| 386 | level = nilfs_btree_node_get_level(node); | ||
| 387 | flags = nilfs_btree_node_get_flags(node); | ||
| 388 | nchildren = nilfs_btree_node_get_nchildren(node); | ||
| 389 | |||
| 390 | if (unlikely(level < NILFS_BTREE_LEVEL_NODE_MIN || | ||
| 391 | level > NILFS_BTREE_LEVEL_MAX || | ||
| 392 | nchildren < 0 || | ||
| 393 | nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) { | ||
| 394 | pr_crit("NILFS: bad btree root (inode number=%lu): level = %d, flags = 0x%x, nchildren = %d\n", | ||
| 395 | ino, level, flags, nchildren); | ||
| 396 | ret = 1; | ||
| 397 | } | ||
| 398 | return ret; | ||
| 399 | } | ||
| 400 | |||
| 371 | int nilfs_btree_broken_node_block(struct buffer_head *bh) | 401 | int nilfs_btree_broken_node_block(struct buffer_head *bh) |
| 372 | { | 402 | { |
| 373 | int ret; | 403 | int ret; |
| @@ -1713,7 +1743,7 @@ nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *btree, | |||
| 1713 | 1743 | ||
| 1714 | /* convert and insert */ | 1744 | /* convert and insert */ |
| 1715 | dat = NILFS_BMAP_USE_VBN(btree) ? nilfs_bmap_get_dat(btree) : NULL; | 1745 | dat = NILFS_BMAP_USE_VBN(btree) ? nilfs_bmap_get_dat(btree) : NULL; |
| 1716 | nilfs_btree_init(btree); | 1746 | __nilfs_btree_init(btree); |
| 1717 | if (nreq != NULL) { | 1747 | if (nreq != NULL) { |
| 1718 | nilfs_bmap_commit_alloc_ptr(btree, dreq, dat); | 1748 | nilfs_bmap_commit_alloc_ptr(btree, dreq, dat); |
| 1719 | nilfs_bmap_commit_alloc_ptr(btree, nreq, dat); | 1749 | nilfs_bmap_commit_alloc_ptr(btree, nreq, dat); |
| @@ -2294,12 +2324,23 @@ static const struct nilfs_bmap_operations nilfs_btree_ops_gc = { | |||
| 2294 | .bop_gather_data = NULL, | 2324 | .bop_gather_data = NULL, |
| 2295 | }; | 2325 | }; |
| 2296 | 2326 | ||
| 2297 | int nilfs_btree_init(struct nilfs_bmap *bmap) | 2327 | static void __nilfs_btree_init(struct nilfs_bmap *bmap) |
| 2298 | { | 2328 | { |
| 2299 | bmap->b_ops = &nilfs_btree_ops; | 2329 | bmap->b_ops = &nilfs_btree_ops; |
| 2300 | bmap->b_nchildren_per_block = | 2330 | bmap->b_nchildren_per_block = |
| 2301 | NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(bmap)); | 2331 | NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(bmap)); |
| 2302 | return 0; | 2332 | } |
| 2333 | |||
| 2334 | int nilfs_btree_init(struct nilfs_bmap *bmap) | ||
| 2335 | { | ||
| 2336 | int ret = 0; | ||
| 2337 | |||
| 2338 | __nilfs_btree_init(bmap); | ||
| 2339 | |||
| 2340 | if (nilfs_btree_root_broken(nilfs_btree_get_root(bmap), | ||
| 2341 | bmap->b_inode->i_ino)) | ||
| 2342 | ret = -EIO; | ||
| 2343 | return ret; | ||
| 2303 | } | 2344 | } |
| 2304 | 2345 | ||
| 2305 | void nilfs_btree_init_gc(struct nilfs_bmap *bmap) | 2346 | void nilfs_btree_init_gc(struct nilfs_bmap *bmap) |
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index ce615d12fb44..a2e1cb8a568b 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c | |||
| @@ -397,7 +397,8 @@ STATIC int /* error (positive) */ | |||
| 397 | xfs_zero_last_block( | 397 | xfs_zero_last_block( |
| 398 | struct xfs_inode *ip, | 398 | struct xfs_inode *ip, |
| 399 | xfs_fsize_t offset, | 399 | xfs_fsize_t offset, |
| 400 | xfs_fsize_t isize) | 400 | xfs_fsize_t isize, |
| 401 | bool *did_zeroing) | ||
| 401 | { | 402 | { |
| 402 | struct xfs_mount *mp = ip->i_mount; | 403 | struct xfs_mount *mp = ip->i_mount; |
| 403 | xfs_fileoff_t last_fsb = XFS_B_TO_FSBT(mp, isize); | 404 | xfs_fileoff_t last_fsb = XFS_B_TO_FSBT(mp, isize); |
| @@ -425,6 +426,7 @@ xfs_zero_last_block( | |||
| 425 | zero_len = mp->m_sb.sb_blocksize - zero_offset; | 426 | zero_len = mp->m_sb.sb_blocksize - zero_offset; |
| 426 | if (isize + zero_len > offset) | 427 | if (isize + zero_len > offset) |
| 427 | zero_len = offset - isize; | 428 | zero_len = offset - isize; |
| 429 | *did_zeroing = true; | ||
| 428 | return xfs_iozero(ip, isize, zero_len); | 430 | return xfs_iozero(ip, isize, zero_len); |
| 429 | } | 431 | } |
| 430 | 432 | ||
| @@ -443,7 +445,8 @@ int /* error (positive) */ | |||
| 443 | xfs_zero_eof( | 445 | xfs_zero_eof( |
| 444 | struct xfs_inode *ip, | 446 | struct xfs_inode *ip, |
| 445 | xfs_off_t offset, /* starting I/O offset */ | 447 | xfs_off_t offset, /* starting I/O offset */ |
| 446 | xfs_fsize_t isize) /* current inode size */ | 448 | xfs_fsize_t isize, /* current inode size */ |
| 449 | bool *did_zeroing) | ||
| 447 | { | 450 | { |
| 448 | struct xfs_mount *mp = ip->i_mount; | 451 | struct xfs_mount *mp = ip->i_mount; |
| 449 | xfs_fileoff_t start_zero_fsb; | 452 | xfs_fileoff_t start_zero_fsb; |
| @@ -465,7 +468,7 @@ xfs_zero_eof( | |||
| 465 | * We only zero a part of that block so it is handled specially. | 468 | * We only zero a part of that block so it is handled specially. |
| 466 | */ | 469 | */ |
| 467 | if (XFS_B_FSB_OFFSET(mp, isize) != 0) { | 470 | if (XFS_B_FSB_OFFSET(mp, isize) != 0) { |
| 468 | error = xfs_zero_last_block(ip, offset, isize); | 471 | error = xfs_zero_last_block(ip, offset, isize, did_zeroing); |
| 469 | if (error) | 472 | if (error) |
| 470 | return error; | 473 | return error; |
| 471 | } | 474 | } |
| @@ -525,6 +528,7 @@ xfs_zero_eof( | |||
| 525 | if (error) | 528 | if (error) |
| 526 | return error; | 529 | return error; |
| 527 | 530 | ||
| 531 | *did_zeroing = true; | ||
| 528 | start_zero_fsb = imap.br_startoff + imap.br_blockcount; | 532 | start_zero_fsb = imap.br_startoff + imap.br_blockcount; |
| 529 | ASSERT(start_zero_fsb <= (end_zero_fsb + 1)); | 533 | ASSERT(start_zero_fsb <= (end_zero_fsb + 1)); |
| 530 | } | 534 | } |
| @@ -567,13 +571,15 @@ restart: | |||
| 567 | * having to redo all checks before. | 571 | * having to redo all checks before. |
| 568 | */ | 572 | */ |
| 569 | if (*pos > i_size_read(inode)) { | 573 | if (*pos > i_size_read(inode)) { |
| 574 | bool zero = false; | ||
| 575 | |||
| 570 | if (*iolock == XFS_IOLOCK_SHARED) { | 576 | if (*iolock == XFS_IOLOCK_SHARED) { |
| 571 | xfs_rw_iunlock(ip, *iolock); | 577 | xfs_rw_iunlock(ip, *iolock); |
| 572 | *iolock = XFS_IOLOCK_EXCL; | 578 | *iolock = XFS_IOLOCK_EXCL; |
| 573 | xfs_rw_ilock(ip, *iolock); | 579 | xfs_rw_ilock(ip, *iolock); |
| 574 | goto restart; | 580 | goto restart; |
| 575 | } | 581 | } |
| 576 | error = xfs_zero_eof(ip, *pos, i_size_read(inode)); | 582 | error = xfs_zero_eof(ip, *pos, i_size_read(inode), &zero); |
| 577 | if (error) | 583 | if (error) |
| 578 | return error; | 584 | return error; |
| 579 | } | 585 | } |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index daafa1f6d260..6163767aa856 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -2867,6 +2867,10 @@ xfs_rename( | |||
| 2867 | * Handle RENAME_EXCHANGE flags | 2867 | * Handle RENAME_EXCHANGE flags |
| 2868 | */ | 2868 | */ |
| 2869 | if (flags & RENAME_EXCHANGE) { | 2869 | if (flags & RENAME_EXCHANGE) { |
| 2870 | if (target_ip == NULL) { | ||
| 2871 | error = -EINVAL; | ||
| 2872 | goto error_return; | ||
| 2873 | } | ||
| 2870 | error = xfs_cross_rename(tp, src_dp, src_name, src_ip, | 2874 | error = xfs_cross_rename(tp, src_dp, src_name, src_ip, |
| 2871 | target_dp, target_name, target_ip, | 2875 | target_dp, target_name, target_ip, |
| 2872 | &free_list, &first_block, spaceres); | 2876 | &free_list, &first_block, spaceres); |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 86cd6b39bed7..a1cd55f3f351 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
| @@ -384,10 +384,11 @@ enum xfs_prealloc_flags { | |||
| 384 | XFS_PREALLOC_INVISIBLE = (1 << 4), | 384 | XFS_PREALLOC_INVISIBLE = (1 << 4), |
| 385 | }; | 385 | }; |
| 386 | 386 | ||
| 387 | int xfs_update_prealloc_flags(struct xfs_inode *, | 387 | int xfs_update_prealloc_flags(struct xfs_inode *ip, |
| 388 | enum xfs_prealloc_flags); | 388 | enum xfs_prealloc_flags flags); |
| 389 | int xfs_zero_eof(struct xfs_inode *, xfs_off_t, xfs_fsize_t); | 389 | int xfs_zero_eof(struct xfs_inode *ip, xfs_off_t offset, |
| 390 | int xfs_iozero(struct xfs_inode *, loff_t, size_t); | 390 | xfs_fsize_t isize, bool *did_zeroing); |
| 391 | int xfs_iozero(struct xfs_inode *ip, loff_t pos, size_t count); | ||
| 391 | 392 | ||
| 392 | 393 | ||
| 393 | #define IHOLD(ip) \ | 394 | #define IHOLD(ip) \ |
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d919ad7b16bf..e53a90331422 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
| @@ -751,6 +751,7 @@ xfs_setattr_size( | |||
| 751 | int error; | 751 | int error; |
| 752 | uint lock_flags = 0; | 752 | uint lock_flags = 0; |
| 753 | uint commit_flags = 0; | 753 | uint commit_flags = 0; |
| 754 | bool did_zeroing = false; | ||
| 754 | 755 | ||
| 755 | trace_xfs_setattr(ip); | 756 | trace_xfs_setattr(ip); |
| 756 | 757 | ||
| @@ -794,20 +795,16 @@ xfs_setattr_size( | |||
| 794 | return error; | 795 | return error; |
| 795 | 796 | ||
| 796 | /* | 797 | /* |
| 797 | * Now we can make the changes. Before we join the inode to the | 798 | * File data changes must be complete before we start the transaction to |
| 798 | * transaction, take care of the part of the truncation that must be | 799 | * modify the inode. This needs to be done before joining the inode to |
| 799 | * done without the inode lock. This needs to be done before joining | 800 | * the transaction because the inode cannot be unlocked once it is a |
| 800 | * the inode to the transaction, because the inode cannot be unlocked | 801 | * part of the transaction. |
| 801 | * once it is a part of the transaction. | 802 | * |
| 803 | * Start with zeroing any data block beyond EOF that we may expose on | ||
| 804 | * file extension. | ||
| 802 | */ | 805 | */ |
| 803 | if (newsize > oldsize) { | 806 | if (newsize > oldsize) { |
| 804 | /* | 807 | error = xfs_zero_eof(ip, newsize, oldsize, &did_zeroing); |
| 805 | * Do the first part of growing a file: zero any data in the | ||
| 806 | * last block that is beyond the old EOF. We need to do this | ||
| 807 | * before the inode is joined to the transaction to modify | ||
| 808 | * i_size. | ||
| 809 | */ | ||
| 810 | error = xfs_zero_eof(ip, newsize, oldsize); | ||
| 811 | if (error) | 808 | if (error) |
| 812 | return error; | 809 | return error; |
| 813 | } | 810 | } |
| @@ -817,23 +814,18 @@ xfs_setattr_size( | |||
| 817 | * any previous writes that are beyond the on disk EOF and the new | 814 | * any previous writes that are beyond the on disk EOF and the new |
| 818 | * EOF that have not been written out need to be written here. If we | 815 | * EOF that have not been written out need to be written here. If we |
| 819 | * do not write the data out, we expose ourselves to the null files | 816 | * do not write the data out, we expose ourselves to the null files |
| 820 | * problem. | 817 | * problem. Note that this includes any block zeroing we did above; |
| 821 | * | 818 | * otherwise those blocks may not be zeroed after a crash. |
| 822 | * Only flush from the on disk size to the smaller of the in memory | ||
| 823 | * file size or the new size as that's the range we really care about | ||
| 824 | * here and prevents waiting for other data not within the range we | ||
| 825 | * care about here. | ||
| 826 | */ | 819 | */ |
| 827 | if (oldsize != ip->i_d.di_size && newsize > ip->i_d.di_size) { | 820 | if (newsize > ip->i_d.di_size && |
| 821 | (oldsize != ip->i_d.di_size || did_zeroing)) { | ||
| 828 | error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, | 822 | error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, |
| 829 | ip->i_d.di_size, newsize); | 823 | ip->i_d.di_size, newsize); |
| 830 | if (error) | 824 | if (error) |
| 831 | return error; | 825 | return error; |
| 832 | } | 826 | } |
| 833 | 827 | ||
| 834 | /* | 828 | /* Now wait for all direct I/O to complete. */ |
| 835 | * Wait for all direct I/O to complete. | ||
| 836 | */ | ||
| 837 | inode_dio_wait(inode); | 829 | inode_dio_wait(inode); |
| 838 | 830 | ||
| 839 | /* | 831 | /* |
diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c index 4b33ef112400..365dd57ea760 100644 --- a/fs/xfs/xfs_pnfs.c +++ b/fs/xfs/xfs_pnfs.c | |||
| @@ -300,8 +300,10 @@ xfs_fs_commit_blocks( | |||
| 300 | 300 | ||
| 301 | tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); | 301 | tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); |
| 302 | error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0); | 302 | error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0); |
| 303 | if (error) | 303 | if (error) { |
| 304 | xfs_trans_cancel(tp, 0); | ||
| 304 | goto out_drop_iolock; | 305 | goto out_drop_iolock; |
| 306 | } | ||
| 305 | 307 | ||
| 306 | xfs_ilock(ip, XFS_ILOCK_EXCL); | 308 | xfs_ilock(ip, XFS_ILOCK_EXCL); |
| 307 | xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); | 309 | xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); |
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 53cc2aaf8d2b..fbbb9e62e274 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
| @@ -836,6 +836,11 @@ xfs_qm_reset_dqcounts( | |||
| 836 | */ | 836 | */ |
| 837 | xfs_dqcheck(mp, ddq, id+j, type, XFS_QMOPT_DQREPAIR, | 837 | xfs_dqcheck(mp, ddq, id+j, type, XFS_QMOPT_DQREPAIR, |
| 838 | "xfs_quotacheck"); | 838 | "xfs_quotacheck"); |
| 839 | /* | ||
| 840 | * Reset type in case we are reusing group quota file for | ||
| 841 | * project quotas or vice versa | ||
| 842 | */ | ||
| 843 | ddq->d_flags = type; | ||
| 839 | ddq->d_bcount = 0; | 844 | ddq->d_bcount = 0; |
| 840 | ddq->d_icount = 0; | 845 | ddq->d_icount = 0; |
| 841 | ddq->d_rtbcount = 0; | 846 | ddq->d_rtbcount = 0; |
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h index 51f7ccadf923..4173a8fdad9e 100644 --- a/include/linux/hid-sensor-hub.h +++ b/include/linux/hid-sensor-hub.h | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | * @units: Measurment unit for this attribute. | 33 | * @units: Measurment unit for this attribute. |
| 34 | * @unit_expo: Exponent used in the data. | 34 | * @unit_expo: Exponent used in the data. |
| 35 | * @size: Size in bytes for data size. | 35 | * @size: Size in bytes for data size. |
| 36 | * @logical_minimum: Logical minimum value for this attribute. | ||
| 37 | * @logical_maximum: Logical maximum value for this attribute. | ||
| 36 | */ | 38 | */ |
| 37 | struct hid_sensor_hub_attribute_info { | 39 | struct hid_sensor_hub_attribute_info { |
| 38 | u32 usage_id; | 40 | u32 usage_id; |
| @@ -146,6 +148,7 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, | |||
| 146 | 148 | ||
| 147 | /** | 149 | /** |
| 148 | * sensor_hub_input_attr_get_raw_value() - Synchronous read request | 150 | * sensor_hub_input_attr_get_raw_value() - Synchronous read request |
| 151 | * @hsdev: Hub device instance. | ||
| 149 | * @usage_id: Attribute usage id of parent physical device as per spec | 152 | * @usage_id: Attribute usage id of parent physical device as per spec |
| 150 | * @attr_usage_id: Attribute usage id as per spec | 153 | * @attr_usage_id: Attribute usage id as per spec |
| 151 | * @report_id: Report id to look for | 154 | * @report_id: Report id to look for |
| @@ -160,6 +163,7 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, | |||
| 160 | u32 attr_usage_id, u32 report_id); | 163 | u32 attr_usage_id, u32 report_id); |
| 161 | /** | 164 | /** |
| 162 | * sensor_hub_set_feature() - Feature set request | 165 | * sensor_hub_set_feature() - Feature set request |
| 166 | * @hsdev: Hub device instance. | ||
| 163 | * @report_id: Report id to look for | 167 | * @report_id: Report id to look for |
| 164 | * @field_index: Field index inside a report | 168 | * @field_index: Field index inside a report |
| 165 | * @value: Value to set | 169 | * @value: Value to set |
| @@ -172,6 +176,7 @@ int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, | |||
| 172 | 176 | ||
| 173 | /** | 177 | /** |
| 174 | * sensor_hub_get_feature() - Feature get request | 178 | * sensor_hub_get_feature() - Feature get request |
| 179 | * @hsdev: Hub device instance. | ||
| 175 | * @report_id: Report id to look for | 180 | * @report_id: Report id to look for |
| 176 | * @field_index: Field index inside a report | 181 | * @field_index: Field index inside a report |
| 177 | * @value: Place holder for return value | 182 | * @value: Place holder for return value |
diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 7491ee5d8164..83338210ee04 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h | |||
| @@ -46,4 +46,30 @@ static inline efi_system_table_t __init *xen_efi_probe(void) | |||
| 46 | } | 46 | } |
| 47 | #endif | 47 | #endif |
| 48 | 48 | ||
| 49 | #ifdef CONFIG_PREEMPT | ||
| 50 | |||
| 51 | static inline void xen_preemptible_hcall_begin(void) | ||
| 52 | { | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void xen_preemptible_hcall_end(void) | ||
| 56 | { | ||
| 57 | } | ||
| 58 | |||
| 59 | #else | ||
| 60 | |||
| 61 | DECLARE_PER_CPU(bool, xen_in_preemptible_hcall); | ||
| 62 | |||
| 63 | static inline void xen_preemptible_hcall_begin(void) | ||
| 64 | { | ||
| 65 | __this_cpu_write(xen_in_preemptible_hcall, true); | ||
| 66 | } | ||
| 67 | |||
| 68 | static inline void xen_preemptible_hcall_end(void) | ||
| 69 | { | ||
| 70 | __this_cpu_write(xen_in_preemptible_hcall, false); | ||
| 71 | } | ||
| 72 | |||
| 73 | #endif /* CONFIG_PREEMPT */ | ||
| 74 | |||
| 49 | #endif /* INCLUDE_XEN_OPS_H */ | 75 | #endif /* INCLUDE_XEN_OPS_H */ |
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index ff7f47d026ac..782172f073c5 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c | |||
| @@ -314,12 +314,12 @@ static void notrace klp_ftrace_handler(unsigned long ip, | |||
| 314 | rcu_read_lock(); | 314 | rcu_read_lock(); |
| 315 | func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, | 315 | func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, |
| 316 | stack_node); | 316 | stack_node); |
| 317 | rcu_read_unlock(); | ||
| 318 | |||
| 319 | if (WARN_ON_ONCE(!func)) | 317 | if (WARN_ON_ONCE(!func)) |
| 320 | return; | 318 | goto unlock; |
| 321 | 319 | ||
| 322 | klp_arch_set_pc(regs, (unsigned long)func->new_func); | 320 | klp_arch_set_pc(regs, (unsigned long)func->new_func); |
| 321 | unlock: | ||
| 322 | rcu_read_unlock(); | ||
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | static int klp_disable_func(struct klp_func *func) | 325 | static int klp_disable_func(struct klp_func *func) |
| @@ -731,7 +731,7 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) | |||
| 731 | func->state = KLP_DISABLED; | 731 | func->state = KLP_DISABLED; |
| 732 | 732 | ||
| 733 | return kobject_init_and_add(&func->kobj, &klp_ktype_func, | 733 | return kobject_init_and_add(&func->kobj, &klp_ktype_func, |
| 734 | obj->kobj, func->old_name); | 734 | obj->kobj, "%s", func->old_name); |
| 735 | } | 735 | } |
| 736 | 736 | ||
| 737 | /* parts of the initialization that is done only when the object is loaded */ | 737 | /* parts of the initialization that is done only when the object is loaded */ |
| @@ -807,7 +807,7 @@ static int klp_init_patch(struct klp_patch *patch) | |||
| 807 | patch->state = KLP_DISABLED; | 807 | patch->state = KLP_DISABLED; |
| 808 | 808 | ||
| 809 | ret = kobject_init_and_add(&patch->kobj, &klp_ktype_patch, | 809 | ret = kobject_init_and_add(&patch->kobj, &klp_ktype_patch, |
| 810 | klp_root_kobj, patch->mod->name); | 810 | klp_root_kobj, "%s", patch->mod->name); |
| 811 | if (ret) | 811 | if (ret) |
| 812 | goto unlock; | 812 | goto unlock; |
| 813 | 813 | ||
diff --git a/kernel/sys.c b/kernel/sys.c index 667b2e62fad2..a03d9cd23ed7 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -1108,6 +1108,7 @@ DECLARE_RWSEM(uts_sem); | |||
| 1108 | /* | 1108 | /* |
| 1109 | * Work around broken programs that cannot handle "Linux 3.0". | 1109 | * Work around broken programs that cannot handle "Linux 3.0". |
| 1110 | * Instead we map 3.x to 2.6.40+x, so e.g. 3.0 would be 2.6.40 | 1110 | * Instead we map 3.x to 2.6.40+x, so e.g. 3.0 would be 2.6.40 |
| 1111 | * And we map 4.x to 2.6.60+x, so 4.0 would be 2.6.60. | ||
| 1111 | */ | 1112 | */ |
| 1112 | static int override_release(char __user *release, size_t len) | 1113 | static int override_release(char __user *release, size_t len) |
| 1113 | { | 1114 | { |
| @@ -1127,7 +1128,7 @@ static int override_release(char __user *release, size_t len) | |||
| 1127 | break; | 1128 | break; |
| 1128 | rest++; | 1129 | rest++; |
| 1129 | } | 1130 | } |
| 1130 | v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 40; | 1131 | v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60; |
| 1131 | copy = clamp_t(size_t, len, 1, sizeof(buf)); | 1132 | copy = clamp_t(size_t, len, 1, sizeof(buf)); |
| 1132 | copy = scnprintf(buf, copy, "2.6.%u%s", v, rest); | 1133 | copy = scnprintf(buf, copy, "2.6.%u%s", v, rest); |
| 1133 | ret = copy_to_user(release, buf, copy + 1); | 1134 | ret = copy_to_user(release, buf, copy + 1); |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d18d3a6e7337..9fe07692eaad 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -5247,7 +5247,7 @@ static int memory_low_show(struct seq_file *m, void *v) | |||
| 5247 | unsigned long low = ACCESS_ONCE(memcg->low); | 5247 | unsigned long low = ACCESS_ONCE(memcg->low); |
| 5248 | 5248 | ||
| 5249 | if (low == PAGE_COUNTER_MAX) | 5249 | if (low == PAGE_COUNTER_MAX) |
| 5250 | seq_puts(m, "infinity\n"); | 5250 | seq_puts(m, "max\n"); |
| 5251 | else | 5251 | else |
| 5252 | seq_printf(m, "%llu\n", (u64)low * PAGE_SIZE); | 5252 | seq_printf(m, "%llu\n", (u64)low * PAGE_SIZE); |
| 5253 | 5253 | ||
| @@ -5262,7 +5262,7 @@ static ssize_t memory_low_write(struct kernfs_open_file *of, | |||
| 5262 | int err; | 5262 | int err; |
| 5263 | 5263 | ||
| 5264 | buf = strstrip(buf); | 5264 | buf = strstrip(buf); |
| 5265 | err = page_counter_memparse(buf, "infinity", &low); | 5265 | err = page_counter_memparse(buf, "max", &low); |
| 5266 | if (err) | 5266 | if (err) |
| 5267 | return err; | 5267 | return err; |
| 5268 | 5268 | ||
| @@ -5277,7 +5277,7 @@ static int memory_high_show(struct seq_file *m, void *v) | |||
| 5277 | unsigned long high = ACCESS_ONCE(memcg->high); | 5277 | unsigned long high = ACCESS_ONCE(memcg->high); |
| 5278 | 5278 | ||
| 5279 | if (high == PAGE_COUNTER_MAX) | 5279 | if (high == PAGE_COUNTER_MAX) |
| 5280 | seq_puts(m, "infinity\n"); | 5280 | seq_puts(m, "max\n"); |
| 5281 | else | 5281 | else |
| 5282 | seq_printf(m, "%llu\n", (u64)high * PAGE_SIZE); | 5282 | seq_printf(m, "%llu\n", (u64)high * PAGE_SIZE); |
| 5283 | 5283 | ||
| @@ -5292,7 +5292,7 @@ static ssize_t memory_high_write(struct kernfs_open_file *of, | |||
| 5292 | int err; | 5292 | int err; |
| 5293 | 5293 | ||
| 5294 | buf = strstrip(buf); | 5294 | buf = strstrip(buf); |
| 5295 | err = page_counter_memparse(buf, "infinity", &high); | 5295 | err = page_counter_memparse(buf, "max", &high); |
| 5296 | if (err) | 5296 | if (err) |
| 5297 | return err; | 5297 | return err; |
| 5298 | 5298 | ||
| @@ -5307,7 +5307,7 @@ static int memory_max_show(struct seq_file *m, void *v) | |||
| 5307 | unsigned long max = ACCESS_ONCE(memcg->memory.limit); | 5307 | unsigned long max = ACCESS_ONCE(memcg->memory.limit); |
| 5308 | 5308 | ||
| 5309 | if (max == PAGE_COUNTER_MAX) | 5309 | if (max == PAGE_COUNTER_MAX) |
| 5310 | seq_puts(m, "infinity\n"); | 5310 | seq_puts(m, "max\n"); |
| 5311 | else | 5311 | else |
| 5312 | seq_printf(m, "%llu\n", (u64)max * PAGE_SIZE); | 5312 | seq_printf(m, "%llu\n", (u64)max * PAGE_SIZE); |
| 5313 | 5313 | ||
| @@ -5322,7 +5322,7 @@ static ssize_t memory_max_write(struct kernfs_open_file *of, | |||
| 5322 | int err; | 5322 | int err; |
| 5323 | 5323 | ||
| 5324 | buf = strstrip(buf); | 5324 | buf = strstrip(buf); |
| 5325 | err = page_counter_memparse(buf, "infinity", &max); | 5325 | err = page_counter_memparse(buf, "max", &max); |
| 5326 | if (err) | 5326 | if (err) |
| 5327 | return err; | 5327 | return err; |
| 5328 | 5328 | ||
| @@ -5426,7 +5426,7 @@ bool mem_cgroup_low(struct mem_cgroup *root, struct mem_cgroup *memcg) | |||
| 5426 | if (memcg == root_mem_cgroup) | 5426 | if (memcg == root_mem_cgroup) |
| 5427 | return false; | 5427 | return false; |
| 5428 | 5428 | ||
| 5429 | if (page_counter_read(&memcg->memory) > memcg->low) | 5429 | if (page_counter_read(&memcg->memory) >= memcg->low) |
| 5430 | return false; | 5430 | return false; |
| 5431 | 5431 | ||
| 5432 | while (memcg != root) { | 5432 | while (memcg != root) { |
| @@ -5435,7 +5435,7 @@ bool mem_cgroup_low(struct mem_cgroup *root, struct mem_cgroup *memcg) | |||
| 5435 | if (memcg == root_mem_cgroup) | 5435 | if (memcg == root_mem_cgroup) |
| 5436 | break; | 5436 | break; |
| 5437 | 5437 | ||
| 5438 | if (page_counter_read(&memcg->memory) > memcg->low) | 5438 | if (page_counter_read(&memcg->memory) >= memcg->low) |
| 5439 | return false; | 5439 | return false; |
| 5440 | } | 5440 | } |
| 5441 | return true; | 5441 | return true; |
diff --git a/mm/nommu.c b/mm/nommu.c index 7296360fc057..3e67e7538ecf 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
| @@ -1213,11 +1213,9 @@ static int do_mmap_private(struct vm_area_struct *vma, | |||
| 1213 | if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages) { | 1213 | if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages) { |
| 1214 | total = point; | 1214 | total = point; |
| 1215 | kdebug("try to alloc exact %lu pages", total); | 1215 | kdebug("try to alloc exact %lu pages", total); |
| 1216 | base = alloc_pages_exact(len, GFP_KERNEL); | ||
| 1217 | } else { | ||
| 1218 | base = (void *)__get_free_pages(GFP_KERNEL, order); | ||
| 1219 | } | 1216 | } |
| 1220 | 1217 | ||
| 1218 | base = alloc_pages_exact(total << PAGE_SHIFT, GFP_KERNEL); | ||
| 1221 | if (!base) | 1219 | if (!base) |
| 1222 | goto enomem; | 1220 | goto enomem; |
| 1223 | 1221 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a47f0b229a1a..7abfa70cdc1a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -2353,8 +2353,15 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, | |||
| 2353 | if (ac->high_zoneidx < ZONE_NORMAL) | 2353 | if (ac->high_zoneidx < ZONE_NORMAL) |
| 2354 | goto out; | 2354 | goto out; |
| 2355 | /* The OOM killer does not compensate for light reclaim */ | 2355 | /* The OOM killer does not compensate for light reclaim */ |
| 2356 | if (!(gfp_mask & __GFP_FS)) | 2356 | if (!(gfp_mask & __GFP_FS)) { |
| 2357 | /* | ||
| 2358 | * XXX: Page reclaim didn't yield anything, | ||
| 2359 | * and the OOM killer can't be invoked, but | ||
| 2360 | * keep looping as per should_alloc_retry(). | ||
| 2361 | */ | ||
| 2362 | *did_some_progress = 1; | ||
| 2357 | goto out; | 2363 | goto out; |
| 2364 | } | ||
| 2358 | /* | 2365 | /* |
| 2359 | * GFP_THISNODE contains __GFP_NORETRY and we never hit this. | 2366 | * GFP_THISNODE contains __GFP_NORETRY and we never hit this. |
| 2360 | * Sanity check for bare calls of __GFP_THISNODE, not real OOM. | 2367 | * Sanity check for bare calls of __GFP_THISNODE, not real OOM. |
diff --git a/mm/shmem.c b/mm/shmem.c index 2f17cb5f00a4..cf2d0ca010bc 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
| @@ -1455,6 +1455,9 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode | |||
| 1455 | 1455 | ||
| 1456 | bool shmem_mapping(struct address_space *mapping) | 1456 | bool shmem_mapping(struct address_space *mapping) |
| 1457 | { | 1457 | { |
| 1458 | if (!mapping->host) | ||
| 1459 | return false; | ||
| 1460 | |||
| 1458 | return mapping->host->i_sb->s_op == &shmem_ops; | 1461 | return mapping->host->i_sb->s_op == &shmem_ops; |
| 1459 | } | 1462 | } |
| 1460 | 1463 | ||
diff --git a/scripts/gdb/linux/__init__.py b/scripts/gdb/linux/__init__.py new file mode 100644 index 000000000000..4680fb176337 --- /dev/null +++ b/scripts/gdb/linux/__init__.py | |||
| @@ -0,0 +1 @@ | |||
| # nothing to do for the initialization of this package | |||
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index b03a638b420c..279e24f61305 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
| @@ -1552,6 +1552,8 @@ static int snd_pcm_do_drain_init(struct snd_pcm_substream *substream, int state) | |||
| 1552 | if (! snd_pcm_playback_empty(substream)) { | 1552 | if (! snd_pcm_playback_empty(substream)) { |
| 1553 | snd_pcm_do_start(substream, SNDRV_PCM_STATE_DRAINING); | 1553 | snd_pcm_do_start(substream, SNDRV_PCM_STATE_DRAINING); |
| 1554 | snd_pcm_post_start(substream, SNDRV_PCM_STATE_DRAINING); | 1554 | snd_pcm_post_start(substream, SNDRV_PCM_STATE_DRAINING); |
| 1555 | } else { | ||
| 1556 | runtime->status->state = SNDRV_PCM_STATE_SETUP; | ||
| 1555 | } | 1557 | } |
| 1556 | break; | 1558 | break; |
| 1557 | case SNDRV_PCM_STATE_RUNNING: | 1559 | case SNDRV_PCM_STATE_RUNNING: |
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c index 0d580186ef1a..5cc356db5351 100644 --- a/sound/firewire/amdtp.c +++ b/sound/firewire/amdtp.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | */ | 33 | */ |
| 34 | #define MAX_MIDI_RX_BLOCKS 8 | 34 | #define MAX_MIDI_RX_BLOCKS 8 |
| 35 | 35 | ||
| 36 | #define TRANSFER_DELAY_TICKS 0x2e00 /* 479.17 µs */ | 36 | #define TRANSFER_DELAY_TICKS 0x2e00 /* 479.17 microseconds */ |
| 37 | 37 | ||
| 38 | /* isochronous header parameters */ | 38 | /* isochronous header parameters */ |
| 39 | #define ISO_DATA_LENGTH_SHIFT 16 | 39 | #define ISO_DATA_LENGTH_SHIFT 16 |
| @@ -78,7 +78,7 @@ static void pcm_period_tasklet(unsigned long data); | |||
| 78 | int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit, | 78 | int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit, |
| 79 | enum amdtp_stream_direction dir, enum cip_flags flags) | 79 | enum amdtp_stream_direction dir, enum cip_flags flags) |
| 80 | { | 80 | { |
| 81 | s->unit = fw_unit_get(unit); | 81 | s->unit = unit; |
| 82 | s->direction = dir; | 82 | s->direction = dir; |
| 83 | s->flags = flags; | 83 | s->flags = flags; |
| 84 | s->context = ERR_PTR(-1); | 84 | s->context = ERR_PTR(-1); |
| @@ -102,7 +102,6 @@ void amdtp_stream_destroy(struct amdtp_stream *s) | |||
| 102 | { | 102 | { |
| 103 | WARN_ON(amdtp_stream_running(s)); | 103 | WARN_ON(amdtp_stream_running(s)); |
| 104 | mutex_destroy(&s->mutex); | 104 | mutex_destroy(&s->mutex); |
| 105 | fw_unit_put(s->unit); | ||
| 106 | } | 105 | } |
| 107 | EXPORT_SYMBOL(amdtp_stream_destroy); | 106 | EXPORT_SYMBOL(amdtp_stream_destroy); |
| 108 | 107 | ||
diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c index fc19c99654aa..611b7dae7ee5 100644 --- a/sound/firewire/bebob/bebob.c +++ b/sound/firewire/bebob/bebob.c | |||
| @@ -116,11 +116,22 @@ end: | |||
| 116 | return err; | 116 | return err; |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | /* | ||
| 120 | * This module releases the FireWire unit data after all ALSA character devices | ||
| 121 | * are released by applications. This is for releasing stream data or finishing | ||
| 122 | * transactions safely. Thus at returning from .remove(), this module still keep | ||
| 123 | * references for the unit. | ||
| 124 | */ | ||
| 119 | static void | 125 | static void |
| 120 | bebob_card_free(struct snd_card *card) | 126 | bebob_card_free(struct snd_card *card) |
| 121 | { | 127 | { |
| 122 | struct snd_bebob *bebob = card->private_data; | 128 | struct snd_bebob *bebob = card->private_data; |
| 123 | 129 | ||
| 130 | snd_bebob_stream_destroy_duplex(bebob); | ||
| 131 | fw_unit_put(bebob->unit); | ||
| 132 | |||
| 133 | kfree(bebob->maudio_special_quirk); | ||
| 134 | |||
| 124 | if (bebob->card_index >= 0) { | 135 | if (bebob->card_index >= 0) { |
| 125 | mutex_lock(&devices_mutex); | 136 | mutex_lock(&devices_mutex); |
| 126 | clear_bit(bebob->card_index, devices_used); | 137 | clear_bit(bebob->card_index, devices_used); |
| @@ -205,7 +216,7 @@ bebob_probe(struct fw_unit *unit, | |||
| 205 | card->private_free = bebob_card_free; | 216 | card->private_free = bebob_card_free; |
| 206 | 217 | ||
| 207 | bebob->card = card; | 218 | bebob->card = card; |
| 208 | bebob->unit = unit; | 219 | bebob->unit = fw_unit_get(unit); |
| 209 | bebob->spec = spec; | 220 | bebob->spec = spec; |
| 210 | mutex_init(&bebob->mutex); | 221 | mutex_init(&bebob->mutex); |
| 211 | spin_lock_init(&bebob->lock); | 222 | spin_lock_init(&bebob->lock); |
| @@ -306,10 +317,11 @@ static void bebob_remove(struct fw_unit *unit) | |||
| 306 | if (bebob == NULL) | 317 | if (bebob == NULL) |
| 307 | return; | 318 | return; |
| 308 | 319 | ||
| 309 | kfree(bebob->maudio_special_quirk); | 320 | /* Awake bus-reset waiters. */ |
| 321 | if (!completion_done(&bebob->bus_reset)) | ||
| 322 | complete_all(&bebob->bus_reset); | ||
| 310 | 323 | ||
| 311 | snd_bebob_stream_destroy_duplex(bebob); | 324 | /* No need to wait for releasing card object in this context. */ |
| 312 | snd_card_disconnect(bebob->card); | ||
| 313 | snd_card_free_when_closed(bebob->card); | 325 | snd_card_free_when_closed(bebob->card); |
| 314 | } | 326 | } |
| 315 | 327 | ||
diff --git a/sound/firewire/bebob/bebob_stream.c b/sound/firewire/bebob/bebob_stream.c index 0ebcabfdc7ce..98e4fc8121a1 100644 --- a/sound/firewire/bebob/bebob_stream.c +++ b/sound/firewire/bebob/bebob_stream.c | |||
| @@ -410,8 +410,6 @@ break_both_connections(struct snd_bebob *bebob) | |||
| 410 | static void | 410 | static void |
| 411 | destroy_both_connections(struct snd_bebob *bebob) | 411 | destroy_both_connections(struct snd_bebob *bebob) |
| 412 | { | 412 | { |
| 413 | break_both_connections(bebob); | ||
| 414 | |||
| 415 | cmp_connection_destroy(&bebob->in_conn); | 413 | cmp_connection_destroy(&bebob->in_conn); |
| 416 | cmp_connection_destroy(&bebob->out_conn); | 414 | cmp_connection_destroy(&bebob->out_conn); |
| 417 | } | 415 | } |
| @@ -712,22 +710,16 @@ void snd_bebob_stream_update_duplex(struct snd_bebob *bebob) | |||
| 712 | mutex_unlock(&bebob->mutex); | 710 | mutex_unlock(&bebob->mutex); |
| 713 | } | 711 | } |
| 714 | 712 | ||
| 713 | /* | ||
| 714 | * This function should be called before starting streams or after stopping | ||
| 715 | * streams. | ||
| 716 | */ | ||
| 715 | void snd_bebob_stream_destroy_duplex(struct snd_bebob *bebob) | 717 | void snd_bebob_stream_destroy_duplex(struct snd_bebob *bebob) |
| 716 | { | 718 | { |
| 717 | mutex_lock(&bebob->mutex); | ||
| 718 | |||
| 719 | amdtp_stream_pcm_abort(&bebob->rx_stream); | ||
| 720 | amdtp_stream_pcm_abort(&bebob->tx_stream); | ||
| 721 | |||
| 722 | amdtp_stream_stop(&bebob->rx_stream); | ||
| 723 | amdtp_stream_stop(&bebob->tx_stream); | ||
| 724 | |||
| 725 | amdtp_stream_destroy(&bebob->rx_stream); | 719 | amdtp_stream_destroy(&bebob->rx_stream); |
| 726 | amdtp_stream_destroy(&bebob->tx_stream); | 720 | amdtp_stream_destroy(&bebob->tx_stream); |
| 727 | 721 | ||
| 728 | destroy_both_connections(bebob); | 722 | destroy_both_connections(bebob); |
| 729 | |||
| 730 | mutex_unlock(&bebob->mutex); | ||
| 731 | } | 723 | } |
| 732 | 724 | ||
| 733 | /* | 725 | /* |
diff --git a/sound/firewire/dice/dice-stream.c b/sound/firewire/dice/dice-stream.c index fa9cf761b610..07dbd01d7a6b 100644 --- a/sound/firewire/dice/dice-stream.c +++ b/sound/firewire/dice/dice-stream.c | |||
| @@ -311,14 +311,21 @@ end: | |||
| 311 | return err; | 311 | return err; |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | /* | ||
| 315 | * This function should be called before starting streams or after stopping | ||
| 316 | * streams. | ||
| 317 | */ | ||
| 314 | static void destroy_stream(struct snd_dice *dice, struct amdtp_stream *stream) | 318 | static void destroy_stream(struct snd_dice *dice, struct amdtp_stream *stream) |
| 315 | { | 319 | { |
| 316 | amdtp_stream_destroy(stream); | 320 | struct fw_iso_resources *resources; |
| 317 | 321 | ||
| 318 | if (stream == &dice->tx_stream) | 322 | if (stream == &dice->tx_stream) |
| 319 | fw_iso_resources_destroy(&dice->tx_resources); | 323 | resources = &dice->tx_resources; |
| 320 | else | 324 | else |
| 321 | fw_iso_resources_destroy(&dice->rx_resources); | 325 | resources = &dice->rx_resources; |
| 326 | |||
| 327 | amdtp_stream_destroy(stream); | ||
| 328 | fw_iso_resources_destroy(resources); | ||
| 322 | } | 329 | } |
| 323 | 330 | ||
| 324 | int snd_dice_stream_init_duplex(struct snd_dice *dice) | 331 | int snd_dice_stream_init_duplex(struct snd_dice *dice) |
| @@ -332,6 +339,8 @@ int snd_dice_stream_init_duplex(struct snd_dice *dice) | |||
| 332 | goto end; | 339 | goto end; |
| 333 | 340 | ||
| 334 | err = init_stream(dice, &dice->rx_stream); | 341 | err = init_stream(dice, &dice->rx_stream); |
| 342 | if (err < 0) | ||
| 343 | destroy_stream(dice, &dice->tx_stream); | ||
| 335 | end: | 344 | end: |
| 336 | return err; | 345 | return err; |
| 337 | } | 346 | } |
| @@ -340,10 +349,7 @@ void snd_dice_stream_destroy_duplex(struct snd_dice *dice) | |||
| 340 | { | 349 | { |
| 341 | snd_dice_transaction_clear_enable(dice); | 350 | snd_dice_transaction_clear_enable(dice); |
| 342 | 351 | ||
| 343 | stop_stream(dice, &dice->tx_stream); | ||
| 344 | destroy_stream(dice, &dice->tx_stream); | 352 | destroy_stream(dice, &dice->tx_stream); |
| 345 | |||
| 346 | stop_stream(dice, &dice->rx_stream); | ||
| 347 | destroy_stream(dice, &dice->rx_stream); | 353 | destroy_stream(dice, &dice->rx_stream); |
| 348 | 354 | ||
| 349 | dice->substreams_counter = 0; | 355 | dice->substreams_counter = 0; |
diff --git a/sound/firewire/dice/dice.c b/sound/firewire/dice/dice.c index 90d8f40ff727..70a111d7f428 100644 --- a/sound/firewire/dice/dice.c +++ b/sound/firewire/dice/dice.c | |||
| @@ -226,11 +226,20 @@ static void dice_card_strings(struct snd_dice *dice) | |||
| 226 | strcpy(card->mixername, "DICE"); | 226 | strcpy(card->mixername, "DICE"); |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | /* | ||
| 230 | * This module releases the FireWire unit data after all ALSA character devices | ||
| 231 | * are released by applications. This is for releasing stream data or finishing | ||
| 232 | * transactions safely. Thus at returning from .remove(), this module still keep | ||
| 233 | * references for the unit. | ||
| 234 | */ | ||
| 229 | static void dice_card_free(struct snd_card *card) | 235 | static void dice_card_free(struct snd_card *card) |
| 230 | { | 236 | { |
| 231 | struct snd_dice *dice = card->private_data; | 237 | struct snd_dice *dice = card->private_data; |
| 232 | 238 | ||
| 239 | snd_dice_stream_destroy_duplex(dice); | ||
| 233 | snd_dice_transaction_destroy(dice); | 240 | snd_dice_transaction_destroy(dice); |
| 241 | fw_unit_put(dice->unit); | ||
| 242 | |||
| 234 | mutex_destroy(&dice->mutex); | 243 | mutex_destroy(&dice->mutex); |
| 235 | } | 244 | } |
| 236 | 245 | ||
| @@ -251,7 +260,7 @@ static int dice_probe(struct fw_unit *unit, const struct ieee1394_device_id *id) | |||
| 251 | 260 | ||
| 252 | dice = card->private_data; | 261 | dice = card->private_data; |
| 253 | dice->card = card; | 262 | dice->card = card; |
| 254 | dice->unit = unit; | 263 | dice->unit = fw_unit_get(unit); |
| 255 | card->private_free = dice_card_free; | 264 | card->private_free = dice_card_free; |
| 256 | 265 | ||
| 257 | spin_lock_init(&dice->lock); | 266 | spin_lock_init(&dice->lock); |
| @@ -305,10 +314,7 @@ static void dice_remove(struct fw_unit *unit) | |||
| 305 | { | 314 | { |
| 306 | struct snd_dice *dice = dev_get_drvdata(&unit->device); | 315 | struct snd_dice *dice = dev_get_drvdata(&unit->device); |
| 307 | 316 | ||
| 308 | snd_card_disconnect(dice->card); | 317 | /* No need to wait for releasing card object in this context. */ |
| 309 | |||
| 310 | snd_dice_stream_destroy_duplex(dice); | ||
| 311 | |||
| 312 | snd_card_free_when_closed(dice->card); | 318 | snd_card_free_when_closed(dice->card); |
| 313 | } | 319 | } |
| 314 | 320 | ||
diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c index 3e2ed8e82cbc..2682e7e3e5c9 100644 --- a/sound/firewire/fireworks/fireworks.c +++ b/sound/firewire/fireworks/fireworks.c | |||
| @@ -173,11 +173,23 @@ end: | |||
| 173 | return err; | 173 | return err; |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | /* | ||
| 177 | * This module releases the FireWire unit data after all ALSA character devices | ||
| 178 | * are released by applications. This is for releasing stream data or finishing | ||
| 179 | * transactions safely. Thus at returning from .remove(), this module still keep | ||
| 180 | * references for the unit. | ||
| 181 | */ | ||
| 176 | static void | 182 | static void |
| 177 | efw_card_free(struct snd_card *card) | 183 | efw_card_free(struct snd_card *card) |
| 178 | { | 184 | { |
| 179 | struct snd_efw *efw = card->private_data; | 185 | struct snd_efw *efw = card->private_data; |
| 180 | 186 | ||
| 187 | snd_efw_stream_destroy_duplex(efw); | ||
| 188 | snd_efw_transaction_remove_instance(efw); | ||
| 189 | fw_unit_put(efw->unit); | ||
| 190 | |||
| 191 | kfree(efw->resp_buf); | ||
| 192 | |||
| 181 | if (efw->card_index >= 0) { | 193 | if (efw->card_index >= 0) { |
| 182 | mutex_lock(&devices_mutex); | 194 | mutex_lock(&devices_mutex); |
| 183 | clear_bit(efw->card_index, devices_used); | 195 | clear_bit(efw->card_index, devices_used); |
| @@ -185,7 +197,6 @@ efw_card_free(struct snd_card *card) | |||
| 185 | } | 197 | } |
| 186 | 198 | ||
| 187 | mutex_destroy(&efw->mutex); | 199 | mutex_destroy(&efw->mutex); |
| 188 | kfree(efw->resp_buf); | ||
| 189 | } | 200 | } |
| 190 | 201 | ||
| 191 | static int | 202 | static int |
| @@ -218,7 +229,7 @@ efw_probe(struct fw_unit *unit, | |||
| 218 | card->private_free = efw_card_free; | 229 | card->private_free = efw_card_free; |
| 219 | 230 | ||
| 220 | efw->card = card; | 231 | efw->card = card; |
| 221 | efw->unit = unit; | 232 | efw->unit = fw_unit_get(unit); |
| 222 | mutex_init(&efw->mutex); | 233 | mutex_init(&efw->mutex); |
| 223 | spin_lock_init(&efw->lock); | 234 | spin_lock_init(&efw->lock); |
| 224 | init_waitqueue_head(&efw->hwdep_wait); | 235 | init_waitqueue_head(&efw->hwdep_wait); |
| @@ -289,10 +300,7 @@ static void efw_remove(struct fw_unit *unit) | |||
| 289 | { | 300 | { |
| 290 | struct snd_efw *efw = dev_get_drvdata(&unit->device); | 301 | struct snd_efw *efw = dev_get_drvdata(&unit->device); |
| 291 | 302 | ||
| 292 | snd_efw_stream_destroy_duplex(efw); | 303 | /* No need to wait for releasing card object in this context. */ |
| 293 | snd_efw_transaction_remove_instance(efw); | ||
| 294 | |||
| 295 | snd_card_disconnect(efw->card); | ||
| 296 | snd_card_free_when_closed(efw->card); | 304 | snd_card_free_when_closed(efw->card); |
| 297 | } | 305 | } |
| 298 | 306 | ||
diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c index 4f440e163667..c55db1bddc80 100644 --- a/sound/firewire/fireworks/fireworks_stream.c +++ b/sound/firewire/fireworks/fireworks_stream.c | |||
| @@ -100,17 +100,22 @@ end: | |||
| 100 | return err; | 100 | return err; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | /* | ||
| 104 | * This function should be called before starting the stream or after stopping | ||
| 105 | * the streams. | ||
| 106 | */ | ||
| 103 | static void | 107 | static void |
| 104 | destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream) | 108 | destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream) |
| 105 | { | 109 | { |
| 106 | stop_stream(efw, stream); | 110 | struct cmp_connection *conn; |
| 107 | |||
| 108 | amdtp_stream_destroy(stream); | ||
| 109 | 111 | ||
| 110 | if (stream == &efw->tx_stream) | 112 | if (stream == &efw->tx_stream) |
| 111 | cmp_connection_destroy(&efw->out_conn); | 113 | conn = &efw->out_conn; |
| 112 | else | 114 | else |
| 113 | cmp_connection_destroy(&efw->in_conn); | 115 | conn = &efw->in_conn; |
| 116 | |||
| 117 | amdtp_stream_destroy(stream); | ||
| 118 | cmp_connection_destroy(&efw->out_conn); | ||
| 114 | } | 119 | } |
| 115 | 120 | ||
| 116 | static int | 121 | static int |
| @@ -319,12 +324,8 @@ void snd_efw_stream_update_duplex(struct snd_efw *efw) | |||
| 319 | 324 | ||
| 320 | void snd_efw_stream_destroy_duplex(struct snd_efw *efw) | 325 | void snd_efw_stream_destroy_duplex(struct snd_efw *efw) |
| 321 | { | 326 | { |
| 322 | mutex_lock(&efw->mutex); | ||
| 323 | |||
| 324 | destroy_stream(efw, &efw->rx_stream); | 327 | destroy_stream(efw, &efw->rx_stream); |
| 325 | destroy_stream(efw, &efw->tx_stream); | 328 | destroy_stream(efw, &efw->tx_stream); |
| 326 | |||
| 327 | mutex_unlock(&efw->mutex); | ||
| 328 | } | 329 | } |
| 329 | 330 | ||
| 330 | void snd_efw_stream_lock_changed(struct snd_efw *efw) | 331 | void snd_efw_stream_lock_changed(struct snd_efw *efw) |
diff --git a/sound/firewire/oxfw/oxfw-stream.c b/sound/firewire/oxfw/oxfw-stream.c index bda845afb470..29ccb3637164 100644 --- a/sound/firewire/oxfw/oxfw-stream.c +++ b/sound/firewire/oxfw/oxfw-stream.c | |||
| @@ -337,6 +337,10 @@ void snd_oxfw_stream_stop_simplex(struct snd_oxfw *oxfw, | |||
| 337 | stop_stream(oxfw, stream); | 337 | stop_stream(oxfw, stream); |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | /* | ||
| 341 | * This function should be called before starting the stream or after stopping | ||
| 342 | * the streams. | ||
| 343 | */ | ||
| 340 | void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw, | 344 | void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw, |
| 341 | struct amdtp_stream *stream) | 345 | struct amdtp_stream *stream) |
| 342 | { | 346 | { |
| @@ -347,8 +351,6 @@ void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw, | |||
| 347 | else | 351 | else |
| 348 | conn = &oxfw->in_conn; | 352 | conn = &oxfw->in_conn; |
| 349 | 353 | ||
| 350 | stop_stream(oxfw, stream); | ||
| 351 | |||
| 352 | amdtp_stream_destroy(stream); | 354 | amdtp_stream_destroy(stream); |
| 353 | cmp_connection_destroy(conn); | 355 | cmp_connection_destroy(conn); |
| 354 | } | 356 | } |
diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c index 60e5cad0531a..8c6ce019f437 100644 --- a/sound/firewire/oxfw/oxfw.c +++ b/sound/firewire/oxfw/oxfw.c | |||
| @@ -104,11 +104,23 @@ end: | |||
| 104 | return err; | 104 | return err; |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | /* | ||
| 108 | * This module releases the FireWire unit data after all ALSA character devices | ||
| 109 | * are released by applications. This is for releasing stream data or finishing | ||
| 110 | * transactions safely. Thus at returning from .remove(), this module still keep | ||
| 111 | * references for the unit. | ||
| 112 | */ | ||
| 107 | static void oxfw_card_free(struct snd_card *card) | 113 | static void oxfw_card_free(struct snd_card *card) |
| 108 | { | 114 | { |
| 109 | struct snd_oxfw *oxfw = card->private_data; | 115 | struct snd_oxfw *oxfw = card->private_data; |
| 110 | unsigned int i; | 116 | unsigned int i; |
| 111 | 117 | ||
| 118 | snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream); | ||
| 119 | if (oxfw->has_output) | ||
| 120 | snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream); | ||
| 121 | |||
| 122 | fw_unit_put(oxfw->unit); | ||
| 123 | |||
| 112 | for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) { | 124 | for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) { |
| 113 | kfree(oxfw->tx_stream_formats[i]); | 125 | kfree(oxfw->tx_stream_formats[i]); |
| 114 | kfree(oxfw->rx_stream_formats[i]); | 126 | kfree(oxfw->rx_stream_formats[i]); |
| @@ -136,7 +148,7 @@ static int oxfw_probe(struct fw_unit *unit, | |||
| 136 | oxfw = card->private_data; | 148 | oxfw = card->private_data; |
| 137 | oxfw->card = card; | 149 | oxfw->card = card; |
| 138 | mutex_init(&oxfw->mutex); | 150 | mutex_init(&oxfw->mutex); |
| 139 | oxfw->unit = unit; | 151 | oxfw->unit = fw_unit_get(unit); |
| 140 | oxfw->device_info = (const struct device_info *)id->driver_data; | 152 | oxfw->device_info = (const struct device_info *)id->driver_data; |
| 141 | spin_lock_init(&oxfw->lock); | 153 | spin_lock_init(&oxfw->lock); |
| 142 | init_waitqueue_head(&oxfw->hwdep_wait); | 154 | init_waitqueue_head(&oxfw->hwdep_wait); |
| @@ -212,12 +224,7 @@ static void oxfw_remove(struct fw_unit *unit) | |||
| 212 | { | 224 | { |
| 213 | struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device); | 225 | struct snd_oxfw *oxfw = dev_get_drvdata(&unit->device); |
| 214 | 226 | ||
| 215 | snd_card_disconnect(oxfw->card); | 227 | /* No need to wait for releasing card object in this context. */ |
| 216 | |||
| 217 | snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream); | ||
| 218 | if (oxfw->has_output) | ||
| 219 | snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream); | ||
| 220 | |||
| 221 | snd_card_free_when_closed(oxfw->card); | 228 | snd_card_free_when_closed(oxfw->card); |
| 222 | } | 229 | } |
| 223 | 230 | ||
diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c index dfcb5e929f9f..a2ce773bdc62 100644 --- a/sound/pci/hda/hda_controller.c +++ b/sound/pci/hda/hda_controller.c | |||
| @@ -961,7 +961,6 @@ static int azx_alloc_cmd_io(struct azx *chip) | |||
| 961 | dev_err(chip->card->dev, "cannot allocate CORB/RIRB\n"); | 961 | dev_err(chip->card->dev, "cannot allocate CORB/RIRB\n"); |
| 962 | return err; | 962 | return err; |
| 963 | } | 963 | } |
| 964 | EXPORT_SYMBOL_GPL(azx_alloc_cmd_io); | ||
| 965 | 964 | ||
| 966 | static void azx_init_cmd_io(struct azx *chip) | 965 | static void azx_init_cmd_io(struct azx *chip) |
| 967 | { | 966 | { |
| @@ -1026,7 +1025,6 @@ static void azx_init_cmd_io(struct azx *chip) | |||
| 1026 | azx_writeb(chip, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN); | 1025 | azx_writeb(chip, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN); |
| 1027 | spin_unlock_irq(&chip->reg_lock); | 1026 | spin_unlock_irq(&chip->reg_lock); |
| 1028 | } | 1027 | } |
| 1029 | EXPORT_SYMBOL_GPL(azx_init_cmd_io); | ||
| 1030 | 1028 | ||
| 1031 | static void azx_free_cmd_io(struct azx *chip) | 1029 | static void azx_free_cmd_io(struct azx *chip) |
| 1032 | { | 1030 | { |
| @@ -1036,7 +1034,6 @@ static void azx_free_cmd_io(struct azx *chip) | |||
| 1036 | azx_writeb(chip, CORBCTL, 0); | 1034 | azx_writeb(chip, CORBCTL, 0); |
| 1037 | spin_unlock_irq(&chip->reg_lock); | 1035 | spin_unlock_irq(&chip->reg_lock); |
| 1038 | } | 1036 | } |
| 1039 | EXPORT_SYMBOL_GPL(azx_free_cmd_io); | ||
| 1040 | 1037 | ||
| 1041 | static unsigned int azx_command_addr(u32 cmd) | 1038 | static unsigned int azx_command_addr(u32 cmd) |
| 1042 | { | 1039 | { |
| @@ -1316,7 +1313,6 @@ static int azx_send_cmd(struct hda_bus *bus, unsigned int val) | |||
| 1316 | else | 1313 | else |
| 1317 | return azx_corb_send_cmd(bus, val); | 1314 | return azx_corb_send_cmd(bus, val); |
| 1318 | } | 1315 | } |
| 1319 | EXPORT_SYMBOL_GPL(azx_send_cmd); | ||
| 1320 | 1316 | ||
| 1321 | /* get a response */ | 1317 | /* get a response */ |
| 1322 | static unsigned int azx_get_response(struct hda_bus *bus, | 1318 | static unsigned int azx_get_response(struct hda_bus *bus, |
| @@ -1330,7 +1326,6 @@ static unsigned int azx_get_response(struct hda_bus *bus, | |||
| 1330 | else | 1326 | else |
| 1331 | return azx_rirb_get_response(bus, addr); | 1327 | return azx_rirb_get_response(bus, addr); |
| 1332 | } | 1328 | } |
| 1333 | EXPORT_SYMBOL_GPL(azx_get_response); | ||
| 1334 | 1329 | ||
| 1335 | #ifdef CONFIG_SND_HDA_DSP_LOADER | 1330 | #ifdef CONFIG_SND_HDA_DSP_LOADER |
| 1336 | /* | 1331 | /* |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 36d2f20db7a4..4ca3d5d02436 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -1966,7 +1966,7 @@ static const struct pci_device_id azx_ids[] = { | |||
| 1966 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, | 1966 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, |
| 1967 | /* Panther Point */ | 1967 | /* Panther Point */ |
| 1968 | { PCI_DEVICE(0x8086, 0x1e20), | 1968 | { PCI_DEVICE(0x8086, 0x1e20), |
| 1969 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, | 1969 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, |
| 1970 | /* Lynx Point */ | 1970 | /* Lynx Point */ |
| 1971 | { PCI_DEVICE(0x8086, 0x8c20), | 1971 | { PCI_DEVICE(0x8086, 0x8c20), |
| 1972 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, | 1972 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 6d36c5b78805..87eff3173ce9 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -79,6 +79,7 @@ enum { | |||
| 79 | STAC_ALIENWARE_M17X, | 79 | STAC_ALIENWARE_M17X, |
| 80 | STAC_92HD89XX_HP_FRONT_JACK, | 80 | STAC_92HD89XX_HP_FRONT_JACK, |
| 81 | STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK, | 81 | STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK, |
| 82 | STAC_92HD73XX_ASUS_MOBO, | ||
| 82 | STAC_92HD73XX_MODELS | 83 | STAC_92HD73XX_MODELS |
| 83 | }; | 84 | }; |
| 84 | 85 | ||
| @@ -1911,7 +1912,18 @@ static const struct hda_fixup stac92hd73xx_fixups[] = { | |||
| 1911 | [STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK] = { | 1912 | [STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK] = { |
| 1912 | .type = HDA_FIXUP_PINS, | 1913 | .type = HDA_FIXUP_PINS, |
| 1913 | .v.pins = stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs, | 1914 | .v.pins = stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs, |
| 1914 | } | 1915 | }, |
| 1916 | [STAC_92HD73XX_ASUS_MOBO] = { | ||
| 1917 | .type = HDA_FIXUP_PINS, | ||
| 1918 | .v.pins = (const struct hda_pintbl[]) { | ||
| 1919 | /* enable 5.1 and SPDIF out */ | ||
| 1920 | { 0x0c, 0x01014411 }, | ||
| 1921 | { 0x0d, 0x01014410 }, | ||
| 1922 | { 0x0e, 0x01014412 }, | ||
| 1923 | { 0x22, 0x014b1180 }, | ||
| 1924 | { } | ||
| 1925 | } | ||
| 1926 | }, | ||
| 1915 | }; | 1927 | }; |
| 1916 | 1928 | ||
| 1917 | static const struct hda_model_fixup stac92hd73xx_models[] = { | 1929 | static const struct hda_model_fixup stac92hd73xx_models[] = { |
| @@ -1923,6 +1935,7 @@ static const struct hda_model_fixup stac92hd73xx_models[] = { | |||
| 1923 | { .id = STAC_DELL_M6_BOTH, .name = "dell-m6" }, | 1935 | { .id = STAC_DELL_M6_BOTH, .name = "dell-m6" }, |
| 1924 | { .id = STAC_DELL_EQ, .name = "dell-eq" }, | 1936 | { .id = STAC_DELL_EQ, .name = "dell-eq" }, |
| 1925 | { .id = STAC_ALIENWARE_M17X, .name = "alienware" }, | 1937 | { .id = STAC_ALIENWARE_M17X, .name = "alienware" }, |
| 1938 | { .id = STAC_92HD73XX_ASUS_MOBO, .name = "asus-mobo" }, | ||
| 1926 | {} | 1939 | {} |
| 1927 | }; | 1940 | }; |
| 1928 | 1941 | ||
| @@ -1975,6 +1988,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = { | |||
| 1975 | "HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK), | 1988 | "HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK), |
| 1976 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17, | 1989 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17, |
| 1977 | "unknown HP", STAC_92HD89XX_HP_FRONT_JACK), | 1990 | "unknown HP", STAC_92HD89XX_HP_FRONT_JACK), |
| 1991 | SND_PCI_QUIRK(PCI_VENDOR_ID_ASUSTEK, 0x83f8, "ASUS AT4NM10", | ||
| 1992 | STAC_92HD73XX_ASUS_MOBO), | ||
| 1978 | {} /* terminator */ | 1993 | {} /* terminator */ |
| 1979 | }; | 1994 | }; |
| 1980 | 1995 | ||
