2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-20 19:23:57 +08:00

Merge 5.5-rc2 into usb-next

We need the USB fixes in here as well.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Greg Kroah-Hartman 2019-12-16 09:02:03 +01:00
commit e880c3744b
423 changed files with 3033 additions and 1854 deletions

View File

@ -276,3 +276,5 @@ Gustavo Padovan <gustavo@las.ic.unicamp.br>
Gustavo Padovan <padovan@profusion.mobi> Gustavo Padovan <padovan@profusion.mobi>
Changbin Du <changbin.du@intel.com> <changbin.du@intel.com> Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com> Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com>
Steve Wise <larrystevenwise@gmail.com> <swise@chelsio.com>
Steve Wise <larrystevenwise@gmail.com> <swise@opengridcomputing.com>

View File

@ -144,7 +144,7 @@ journal_crypt:algorithm(:key) (the key is optional)
Encrypt the journal using given algorithm to make sure that the Encrypt the journal using given algorithm to make sure that the
attacker can't read the journal. You can use a block cipher here attacker can't read the journal. You can use a block cipher here
(such as "cbc(aes)") or a stream cipher (for example "chacha20", (such as "cbc(aes)") or a stream cipher (for example "chacha20",
"salsa20", "ctr(aes)" or "ecb(arc4)"). "salsa20" or "ctr(aes)").
The journal contains history of last writes to the block device, The journal contains history of last writes to the block device,
an attacker reading the journal could see the last sector nubmers an attacker reading the journal could see the last sector nubmers

View File

@ -8,6 +8,7 @@ Device Mapper
cache-policies cache-policies
cache cache
delay delay
dm-clone
dm-crypt dm-crypt
dm-dust dm-dust
dm-flakey dm-flakey

View File

@ -8,7 +8,7 @@ title: Allwinner platforms device tree bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
$nodename: $nodename:

View File

@ -8,7 +8,7 @@ title: Allwinner A64 Display Engine Bus Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
$nodename: $nodename:

View File

@ -8,7 +8,7 @@ title: Allwinner A23 RSB Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": "#address-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner Clock Control Unit Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#clock-cells": "#clock-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Security System Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A31 MIPI-DSI Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": true "#address-cells": true

View File

@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Ronbo RB070D30 DSI Display Panel title: Ronbo RB070D30 DSI Display Panel
maintainers: maintainers:
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A10 DMA Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "dma-controller.yaml#" - $ref: "dma-controller.yaml#"

View File

@ -8,7 +8,7 @@ title: Allwinner A64 DMA Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "dma-controller.yaml#" - $ref: "dma-controller.yaml#"

View File

@ -8,7 +8,7 @@ title: Allwinner A31 DMA Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "dma-controller.yaml#" - $ref: "dma-controller.yaml#"

View File

@ -8,7 +8,7 @@ title: Allwinner A31 P2WI (Push/Pull 2 Wires Interface) Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: /schemas/i2c/i2c-controller.yaml# - $ref: /schemas/i2c/i2c-controller.yaml#

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/iio/adc/adi,ad7292.yaml# $id: http://devicetree.org/schemas/iio/adc/adi,ad7292.yaml#
@ -53,7 +53,8 @@ patternProperties:
description: | description: |
The channel number. It can have up to 8 channels numbered from 0 to 7. The channel number. It can have up to 8 channels numbered from 0 to 7.
items: items:
maximum: 7 - minimum: 0
maximum: 7
diff-channels: diff-channels:
description: see Documentation/devicetree/bindings/iio/adc/adc.txt description: see Documentation/devicetree/bindings/iio/adc/adc.txt

View File

@ -8,7 +8,7 @@ title: Allwinner A33 Thermal Sensor Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#io-channel-cells": "#io-channel-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 LRADC Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Interrupt Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: /schemas/interrupt-controller.yaml# - $ref: /schemas/interrupt-controller.yaml#

View File

@ -8,7 +8,7 @@ title: Allwinner A20 Non-Maskable Interrupt Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: /schemas/interrupt-controller.yaml# - $ref: /schemas/interrupt-controller.yaml#

View File

@ -8,7 +8,7 @@ title: Allwinner A10 CMOS Sensor Interface (CSI) Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
description: |- description: |-
The Allwinner A10 and later has a CMOS Sensor Interface to retrieve The Allwinner A10 and later has a CMOS Sensor Interface to retrieve

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Infrared Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "rc.yaml#" - $ref: "rc.yaml#"

View File

@ -60,7 +60,8 @@ patternProperties:
maximum: 1066000000 maximum: 1066000000
nvidia,emem-configuration: nvidia,emem-configuration:
$ref: /schemas/types.yaml#/definitions/uint32-array allOf:
- $ref: /schemas/types.yaml#/definitions/uint32-array
description: | description: |
Values to be written to the EMEM register block. See section Values to be written to the EMEM register block. See section
"15.6.1 MC Registers" in the TRM. "15.6.1 MC Registers" in the TRM.

View File

@ -56,7 +56,8 @@ patternProperties:
maximum: 900000000 maximum: 900000000
nvidia,emc-auto-cal-interval: nvidia,emc-auto-cal-interval:
$ref: /schemas/types.yaml#/definitions/uint32 allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
description: description:
Pad calibration interval in microseconds. Pad calibration interval in microseconds.
minimum: 0 minimum: 0
@ -78,7 +79,8 @@ patternProperties:
Mode Register 0. Mode Register 0.
nvidia,emc-zcal-cnt-long: nvidia,emc-zcal-cnt-long:
$ref: /schemas/types.yaml#/definitions/uint32 allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
description: description:
Number of EMC clocks to wait before issuing any commands after Number of EMC clocks to wait before issuing any commands after
sending ZCAL_MRW_CMD. sending ZCAL_MRW_CMD.
@ -96,7 +98,8 @@ patternProperties:
FBIO "read" FIFO periodic resetting enabled. FBIO "read" FIFO periodic resetting enabled.
nvidia,emc-configuration: nvidia,emc-configuration:
$ref: /schemas/types.yaml#/definitions/uint32-array allOf:
- $ref: /schemas/types.yaml#/definitions/uint32-array
description: description:
EMC timing characterization data. These are the registers EMC timing characterization data. These are the registers
(see section "18.13.2 EMC Registers" in the TRM) whose values (see section "18.13.2 EMC Registers" in the TRM) whose values

View File

@ -77,7 +77,8 @@ patternProperties:
maximum: 900000000 maximum: 900000000
nvidia,emem-configuration: nvidia,emem-configuration:
$ref: /schemas/types.yaml#/definitions/uint32-array allOf:
- $ref: /schemas/types.yaml#/definitions/uint32-array
description: | description: |
Values to be written to the EMEM register block. See section Values to be written to the EMEM register block. See section
"18.13.1 MC Registers" in the TRM. "18.13.1 MC Registers" in the TRM.

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Resistive Touchscreen Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#thermal-sensor-cells": "#thermal-sensor-cells":

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": true "#address-cells": true

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": true "#address-cells": true

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A10 MDIO Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "mdio.yaml#" - $ref: "mdio.yaml#"

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A83t EMAC Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A10 CAN Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/net/ti,cpsw-switch.yaml# $id: http://devicetree.org/schemas/net/ti,cpsw-switch.yaml#
@ -44,7 +44,6 @@ properties:
description: CPSW functional clock description: CPSW functional clock
clock-names: clock-names:
maxItems: 1
items: items:
- const: fck - const: fck
@ -70,7 +69,6 @@ properties:
Phandle to the system control device node which provides access to Phandle to the system control device node which provides access to
efuse IO range with MAC addresses efuse IO range with MAC addresses
ethernet-ports: ethernet-ports:
type: object type: object
properties: properties:
@ -82,8 +80,6 @@ properties:
patternProperties: patternProperties:
"^port@[0-9]+$": "^port@[0-9]+$":
type: object type: object
minItems: 1
maxItems: 2
description: CPSW external ports description: CPSW external ports
allOf: allOf:
@ -91,23 +87,20 @@ properties:
properties: properties:
reg: reg:
maxItems: 1 items:
enum: [1, 2] - enum: [1, 2]
description: CPSW port number description: CPSW port number
phys: phys:
$ref: /schemas/types.yaml#definitions/phandle-array
maxItems: 1 maxItems: 1
description: phandle on phy-gmii-sel PHY description: phandle on phy-gmii-sel PHY
label: label:
$ref: /schemas/types.yaml#/definitions/string-array
maxItems: 1
description: label associated with this port description: label associated with this port
ti,dual-emac-pvid: ti,dual-emac-pvid:
$ref: /schemas/types.yaml#/definitions/uint32 allOf:
maxItems: 1 - $ref: /schemas/types.yaml#/definitions/uint32
minimum: 1 minimum: 1
maximum: 1024 maximum: 1024
description: description:
@ -136,7 +129,6 @@ properties:
description: CPTS reference clock description: CPTS reference clock
clock-names: clock-names:
maxItems: 1
items: items:
- const: cpts - const: cpts
@ -201,7 +193,7 @@ examples:
phys = <&phy_gmii_sel 1>; phys = <&phy_gmii_sel 1>;
phy-handle = <&ethphy0_sw>; phy-handle = <&ethphy0_sw>;
phy-mode = "rgmii"; phy-mode = "rgmii";
ti,dual_emac_pvid = <1>; ti,dual-emac-pvid = <1>;
}; };
cpsw_port2: port@2 { cpsw_port2: port@2 {
@ -211,7 +203,7 @@ examples:
phys = <&phy_gmii_sel 2>; phys = <&phy_gmii_sel 2>;
phy-handle = <&ethphy1_sw>; phy-handle = <&ethphy1_sw>;
phy-mode = "rgmii"; phy-mode = "rgmii";
ti,dual_emac_pvid = <2>; ti,dual-emac-pvid = <2>;
}; };
}; };

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Security ID Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
allOf: allOf:
- $ref: "nvmem.yaml#" - $ref: "nvmem.yaml#"

View File

@ -8,7 +8,7 @@ title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#phy-cells": "#phy-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Pin Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#gpio-cells": "#gpio-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 PWM Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#pwm-cells": "#pwm-cells":

View File

@ -50,6 +50,8 @@ properties:
description: Should contain the WWDG1 watchdog reset interrupt description: Should contain the WWDG1 watchdog reset interrupt
maxItems: 1 maxItems: 1
wakeup-source: true
mboxes: mboxes:
description: description:
This property is required only if the rpmsg/virtio functionality is used. This property is required only if the rpmsg/virtio functionality is used.

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A31 RTC Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#clock-cells": "#clock-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 PS2 Host Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
description: description:
A20 PS2 is dual role controller (PS2 host and PS2 device). These A20 PS2 is dual role controller (PS2 host and PS2 device). These

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Codec Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#sound-dai-cells": "#sound-dai-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A10 I2S Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#sound-dai-cells": "#sound-dai-cells":

View File

@ -10,7 +10,7 @@ maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Liam Girdwood <lgirdwood@gmail.com> - Liam Girdwood <lgirdwood@gmail.com>
- Mark Brown <broonie@kernel.org> - Mark Brown <broonie@kernel.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#sound-dai-cells": "#sound-dai-cells":

View File

@ -8,7 +8,7 @@ title: Allwinner A64 Analog Codec Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A23 Analog Codec Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A33 Codec Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#sound-dai-cells": "#sound-dai-cells":

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": true "#address-cells": true

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
"#address-cells": true "#address-cells": true

View File

@ -8,7 +8,7 @@ title: Allwinner A10 Timer Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A13 High-Speed Timer Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -8,7 +8,7 @@ title: Allwinner A10 mUSB OTG Controller Device Tree Bindings
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -11,7 +11,7 @@ allOf:
maintainers: maintainers:
- Chen-Yu Tsai <wens@csie.org> - Chen-Yu Tsai <wens@csie.org>
- Maxime Ripard <maxime.ripard@bootlin.com> - Maxime Ripard <mripard@kernel.org>
properties: properties:
compatible: compatible:

View File

@ -24,11 +24,11 @@ Here is the main features of EROFS:
- Metadata & data could be mixed by design; - Metadata & data could be mixed by design;
- 2 inode versions for different requirements: - 2 inode versions for different requirements:
v1 v2 compact (v1) extended (v2)
Inode metadata size: 32 bytes 64 bytes Inode metadata size: 32 bytes 64 bytes
Max file size: 4 GB 16 EB (also limited by max. vol size) Max file size: 4 GB 16 EB (also limited by max. vol size)
Max uids/gids: 65536 4294967296 Max uids/gids: 65536 4294967296
File creation time: no yes (64 + 32-bit timestamp) File change time: no yes (64 + 32-bit timestamp)
Max hardlinks: 65536 4294967296 Max hardlinks: 65536 4294967296
Metadata reserved: 4 bytes 14 bytes Metadata reserved: 4 bytes 14 bytes
@ -39,7 +39,7 @@ Here is the main features of EROFS:
- Support POSIX.1e ACLs by using xattrs; - Support POSIX.1e ACLs by using xattrs;
- Support transparent file compression as an option: - Support transparent file compression as an option:
LZ4 algorithm with 4 KB fixed-output compression for high performance; LZ4 algorithm with 4 KB fixed-sized output compression for high performance.
The following git tree provides the file system user-space tools under The following git tree provides the file system user-space tools under
development (ex, formatting tool mkfs.erofs): development (ex, formatting tool mkfs.erofs):
@ -85,7 +85,7 @@ All data areas should be aligned with the block size, but metadata areas
may not. All metadatas can be now observed in two different spaces (views): may not. All metadatas can be now observed in two different spaces (views):
1. Inode metadata space 1. Inode metadata space
Each valid inode should be aligned with an inode slot, which is a fixed Each valid inode should be aligned with an inode slot, which is a fixed
value (32 bytes) and designed to be kept in line with v1 inode size. value (32 bytes) and designed to be kept in line with compact inode size.
Each inode can be directly found with the following formula: Each inode can be directly found with the following formula:
inode offset = meta_blkaddr * block_size + 32 * nid inode offset = meta_blkaddr * block_size + 32 * nid
@ -117,10 +117,10 @@ may not. All metadatas can be now observed in two different spaces (views):
|-> aligned with 4B |-> aligned with 4B
Inode could be 32 or 64 bytes, which can be distinguished from a common Inode could be 32 or 64 bytes, which can be distinguished from a common
field which all inode versions have -- i_advise: field which all inode versions have -- i_format:
__________________ __________________ __________________ __________________
| i_advise | | i_advise | | i_format | | i_format |
|__________________| |__________________| |__________________| |__________________|
| ... | | ... | | ... | | ... |
| | | | | | | |
@ -129,12 +129,13 @@ may not. All metadatas can be now observed in two different spaces (views):
|__________________| 64 bytes |__________________| 64 bytes
Xattrs, extents, data inline are followed by the corresponding inode with Xattrs, extents, data inline are followed by the corresponding inode with
proper alignes, and they could be optional for different data mappings, proper alignment, and they could be optional for different data mappings.
_currently_ there are totally 3 valid data mappings supported: _currently_ total 4 valid data mappings are supported:
1) flat file data without data inline (no extent); 0 flat file data without data inline (no extent);
2) fixed-output size data compression (must have extents); 1 fixed-sized output data compression (with non-compacted indexes);
3) flat file data with tail-end data inline (no extent); 2 flat file data with tail packing data inline (no extent);
3 fixed-sized output data compression (with compacted indexes, v5.3+).
The size of the optional xattrs is indicated by i_xattr_count in inode The size of the optional xattrs is indicated by i_xattr_count in inode
header. Large xattrs or xattrs shared by many different files can be header. Large xattrs or xattrs shared by many different files can be
@ -182,8 +183,8 @@ introduce another on-disk field at all.
Compression Compression
----------- -----------
Currently, EROFS supports 4KB fixed-output clustersize transparent file Currently, EROFS supports 4KB fixed-sized output transparent file compression,
compression, as illustrated below: as illustrated below:
|---- Variant-Length Extent ----|-------- VLE --------|----- VLE ----- |---- Variant-Length Extent ----|-------- VLE --------|----- VLE -----
clusterofs clusterofs clusterofs clusterofs clusterofs clusterofs

View File

@ -1,3 +1,5 @@
.. SPDX-License-Identifier: GPL-2.0
Written by: Neil Brown Written by: Neil Brown
Please see MAINTAINERS file for where to send questions. Please see MAINTAINERS file for where to send questions.
@ -181,7 +183,7 @@ Kernel config options:
worried about backward compatibility with kernels that have the redirect_dir worried about backward compatibility with kernels that have the redirect_dir
feature and follow redirects even if turned off. feature and follow redirects even if turned off.
Module options (can also be changed through /sys/module/overlay/parameters/*): Module options (can also be changed through /sys/module/overlay/parameters/):
- "redirect_dir=BOOL": - "redirect_dir=BOOL":
See OVERLAY_FS_REDIRECT_DIR kernel config option above. See OVERLAY_FS_REDIRECT_DIR kernel config option above.
@ -263,7 +265,7 @@ top, lower2 the middle and lower3 the bottom layer.
Metadata only copy up Metadata only copy up
-------------------- ---------------------
When metadata only copy up feature is enabled, overlayfs will only copy When metadata only copy up feature is enabled, overlayfs will only copy
up metadata (as opposed to whole file), when a metadata specific operation up metadata (as opposed to whole file), when a metadata specific operation
@ -286,10 +288,10 @@ pointed by REDIRECT. This should not be possible on local system as setting
"trusted." xattrs will require CAP_SYS_ADMIN. But it should be possible "trusted." xattrs will require CAP_SYS_ADMIN. But it should be possible
for untrusted layers like from a pen drive. for untrusted layers like from a pen drive.
Note: redirect_dir={off|nofollow|follow(*)} conflicts with metacopy=on, and Note: redirect_dir={off|nofollow|follow[*]} conflicts with metacopy=on, and
results in an error. results in an error.
(*) redirect_dir=follow only conflicts with metacopy=on if upperdir=... is [*] redirect_dir=follow only conflicts with metacopy=on if upperdir=... is
given. given.
Sharing and copying layers Sharing and copying layers

View File

@ -988,7 +988,7 @@ Similarly, if you need to calculate the size of some structure member, use
.. code-block:: c .. code-block:: c
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) #define sizeof_field(t, f) (sizeof(((t*)0)->f))
There are also min() and max() macros that do strict type checking if you There are also min() and max() macros that do strict type checking if you
need them. Feel free to peruse that header file to see what else is already need them. Feel free to peruse that header file to see what else is already

View File

@ -29,7 +29,7 @@ smartpqi specific entries in /sys
smartpqi host attributes: smartpqi host attributes:
------------------------- -------------------------
/sys/class/scsi_host/host*/rescan /sys/class/scsi_host/host*/rescan
/sys/class/scsi_host/host*/version /sys/class/scsi_host/host*/driver_version
The host rescan attribute is a write only attribute. Writing to this The host rescan attribute is a write only attribute. Writing to this
attribute will trigger the driver to scan for new, changed, or removed attribute will trigger the driver to scan for new, changed, or removed

View File

@ -1005,7 +1005,7 @@ struttura, usate
.. code-block:: c .. code-block:: c
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) #define sizeof_field(t, f) (sizeof(((t*)0)->f))
Ci sono anche le macro min() e max() che, se vi serve, effettuano un controllo Ci sono anche le macro min() e max() che, se vi serve, effettuano un controllo
rigido sui tipi. Sentitevi liberi di leggere attentamente questo file rigido sui tipi. Sentitevi liberi di leggere attentamente questo file

View File

@ -826,7 +826,7 @@ inline gcc 也可以自动使其内联。而且其他用户可能会要求移除
.. code-block:: c .. code-block:: c
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) #define sizeof_field(t, f) (sizeof(((t*)0)->f))
还有可以做严格的类型检查的 min() 和 max() 宏,如果你需要可以使用它们。你可以 还有可以做严格的类型检查的 min() 和 max() 宏,如果你需要可以使用它们。你可以
自己看看那个头文件里还定义了什么你可以拿来用的东西,如果有定义的话,你就不应 自己看看那个头文件里还定义了什么你可以拿来用的东西,如果有定义的话,你就不应

View File

@ -4970,6 +4970,7 @@ F: include/linux/dma-buf*
F: include/linux/reservation.h F: include/linux/reservation.h
F: include/linux/*fence.h F: include/linux/*fence.h
F: Documentation/driver-api/dma-buf.rst F: Documentation/driver-api/dma-buf.rst
K: dma_(buf|fence|resv)
T: git git://anongit.freedesktop.org/drm/drm-misc T: git git://anongit.freedesktop.org/drm/drm-misc
DMA GENERIC OFFLOAD ENGINE SUBSYSTEM DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
@ -12393,7 +12394,7 @@ L: linux-unionfs@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git
S: Supported S: Supported
F: fs/overlayfs/ F: fs/overlayfs/
F: Documentation/filesystems/overlayfs.txt F: Documentation/filesystems/overlayfs.rst
P54 WIRELESS DRIVER P54 WIRELESS DRIVER
M: Christian Lamparter <chunkeey@googlemail.com> M: Christian Lamparter <chunkeey@googlemail.com>
@ -16314,12 +16315,10 @@ F: drivers/media/radio/radio-raremono.c
THERMAL THERMAL
M: Zhang Rui <rui.zhang@intel.com> M: Zhang Rui <rui.zhang@intel.com>
M: Eduardo Valentin <edubezval@gmail.com> M: Daniel Lezcano <daniel.lezcano@linaro.org>
R: Daniel Lezcano <daniel.lezcano@linaro.org>
R: Amit Kucheria <amit.kucheria@verdurent.com> R: Amit Kucheria <amit.kucheria@verdurent.com>
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git
T: git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git
Q: https://patchwork.kernel.org/project/linux-pm/list/ Q: https://patchwork.kernel.org/project/linux-pm/list/
S: Supported S: Supported
F: drivers/thermal/ F: drivers/thermal/

View File

@ -2,7 +2,7 @@
VERSION = 5 VERSION = 5
PATCHLEVEL = 5 PATCHLEVEL = 5
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc1 EXTRAVERSION = -rc2
NAME = Kleptomaniac Octopus NAME = Kleptomaniac Octopus
# *DOCUMENTATION* # *DOCUMENTATION*

View File

@ -42,10 +42,10 @@ do { \
#define EXTRA_INFO(f) { \ #define EXTRA_INFO(f) { \
BUILD_BUG_ON_ZERO(offsetof(struct unwind_frame_info, f) \ BUILD_BUG_ON_ZERO(offsetof(struct unwind_frame_info, f) \
% FIELD_SIZEOF(struct unwind_frame_info, f)) \ % sizeof_field(struct unwind_frame_info, f)) \
+ offsetof(struct unwind_frame_info, f) \ + offsetof(struct unwind_frame_info, f) \
/ FIELD_SIZEOF(struct unwind_frame_info, f), \ / sizeof_field(struct unwind_frame_info, f), \
FIELD_SIZEOF(struct unwind_frame_info, f) \ sizeof_field(struct unwind_frame_info, f) \
} }
#define PTREGS_INFO(f) EXTRA_INFO(regs.f) #define PTREGS_INFO(f) EXTRA_INFO(regs.f)

View File

@ -38,6 +38,13 @@ void curve25519_arch(u8 out[CURVE25519_KEY_SIZE],
} }
EXPORT_SYMBOL(curve25519_arch); EXPORT_SYMBOL(curve25519_arch);
void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
const u8 secret[CURVE25519_KEY_SIZE])
{
return curve25519_arch(pub, secret, curve25519_base_point);
}
EXPORT_SYMBOL(curve25519_base_arch);
static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf, static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
unsigned int len) unsigned int len)
{ {

View File

@ -44,13 +44,6 @@ static struct cvmx_bootmem_desc *cvmx_bootmem_desc;
/* See header file for descriptions of functions */ /* See header file for descriptions of functions */
/**
* This macro returns the size of a member of a structure.
* Logically it is the same as "sizeof(s::field)" in C++, but
* C lacks the "::" operator.
*/
#define SIZEOF_FIELD(s, field) sizeof(((s *)NULL)->field)
/** /**
* This macro returns a member of the * This macro returns a member of the
* cvmx_bootmem_named_block_desc_t structure. These members can't * cvmx_bootmem_named_block_desc_t structure. These members can't
@ -65,7 +58,7 @@ static struct cvmx_bootmem_desc *cvmx_bootmem_desc;
#define CVMX_BOOTMEM_NAMED_GET_FIELD(addr, field) \ #define CVMX_BOOTMEM_NAMED_GET_FIELD(addr, field) \
__cvmx_bootmem_desc_get(addr, \ __cvmx_bootmem_desc_get(addr, \
offsetof(struct cvmx_bootmem_named_block_desc, field), \ offsetof(struct cvmx_bootmem_named_block_desc, field), \
SIZEOF_FIELD(struct cvmx_bootmem_named_block_desc, field)) sizeof_field(struct cvmx_bootmem_named_block_desc, field))
/** /**
* This function is the implementation of the get macros defined * This function is the implementation of the get macros defined

View File

@ -138,6 +138,14 @@ void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
return NULL; return NULL;
} }
/*
* Map uncached objects in the low part of address space to
* CONFIG_NIOS2_IO_REGION_BASE
*/
if (IS_MAPPABLE_UNCACHEABLE(phys_addr) &&
IS_MAPPABLE_UNCACHEABLE(last_addr))
return (void __iomem *)(CONFIG_NIOS2_IO_REGION_BASE + phys_addr);
/* Mappings have to be page-aligned */ /* Mappings have to be page-aligned */
offset = phys_addr & ~PAGE_MASK; offset = phys_addr & ~PAGE_MASK;
phys_addr &= PAGE_MASK; phys_addr &= PAGE_MASK;

View File

@ -97,12 +97,12 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#define PPC_BPF_LOAD_CPU(r) \ #define PPC_BPF_LOAD_CPU(r) \
do { BUILD_BUG_ON(FIELD_SIZEOF(struct paca_struct, paca_index) != 2); \ do { BUILD_BUG_ON(sizeof_field(struct paca_struct, paca_index) != 2); \
PPC_LHZ_OFFS(r, 13, offsetof(struct paca_struct, paca_index)); \ PPC_LHZ_OFFS(r, 13, offsetof(struct paca_struct, paca_index)); \
} while (0) } while (0)
#else #else
#define PPC_BPF_LOAD_CPU(r) \ #define PPC_BPF_LOAD_CPU(r) \
do { BUILD_BUG_ON(FIELD_SIZEOF(struct task_struct, cpu) != 4); \ do { BUILD_BUG_ON(sizeof_field(struct task_struct, cpu) != 4); \
PPC_LHZ_OFFS(r, 2, offsetof(struct task_struct, cpu)); \ PPC_LHZ_OFFS(r, 2, offsetof(struct task_struct, cpu)); \
} while(0) } while(0)
#endif #endif

View File

@ -321,7 +321,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
ctx->seen |= SEEN_XREG | SEEN_MEM | (1<<(K & 0xf)); ctx->seen |= SEEN_XREG | SEEN_MEM | (1<<(K & 0xf));
break; break;
case BPF_LD | BPF_W | BPF_LEN: /* A = skb->len; */ case BPF_LD | BPF_W | BPF_LEN: /* A = skb->len; */
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, len) != 4); BUILD_BUG_ON(sizeof_field(struct sk_buff, len) != 4);
PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, len)); PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, len));
break; break;
case BPF_LDX | BPF_W | BPF_ABS: /* A = *((u32 *)(seccomp_data + K)); */ case BPF_LDX | BPF_W | BPF_ABS: /* A = *((u32 *)(seccomp_data + K)); */
@ -333,16 +333,16 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
/*** Ancillary info loads ***/ /*** Ancillary info loads ***/
case BPF_ANC | SKF_AD_PROTOCOL: /* A = ntohs(skb->protocol); */ case BPF_ANC | SKF_AD_PROTOCOL: /* A = ntohs(skb->protocol); */
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, BUILD_BUG_ON(sizeof_field(struct sk_buff,
protocol) != 2); protocol) != 2);
PPC_NTOHS_OFFS(r_A, r_skb, offsetof(struct sk_buff, PPC_NTOHS_OFFS(r_A, r_skb, offsetof(struct sk_buff,
protocol)); protocol));
break; break;
case BPF_ANC | SKF_AD_IFINDEX: case BPF_ANC | SKF_AD_IFINDEX:
case BPF_ANC | SKF_AD_HATYPE: case BPF_ANC | SKF_AD_HATYPE:
BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, BUILD_BUG_ON(sizeof_field(struct net_device,
ifindex) != 4); ifindex) != 4);
BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, BUILD_BUG_ON(sizeof_field(struct net_device,
type) != 2); type) != 2);
PPC_LL_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff, PPC_LL_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff,
dev)); dev));
@ -365,17 +365,17 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
break; break;
case BPF_ANC | SKF_AD_MARK: case BPF_ANC | SKF_AD_MARK:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); BUILD_BUG_ON(sizeof_field(struct sk_buff, mark) != 4);
PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
mark)); mark));
break; break;
case BPF_ANC | SKF_AD_RXHASH: case BPF_ANC | SKF_AD_RXHASH:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4); BUILD_BUG_ON(sizeof_field(struct sk_buff, hash) != 4);
PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
hash)); hash));
break; break;
case BPF_ANC | SKF_AD_VLAN_TAG: case BPF_ANC | SKF_AD_VLAN_TAG:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); BUILD_BUG_ON(sizeof_field(struct sk_buff, vlan_tci) != 2);
PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
vlan_tci)); vlan_tci));
@ -388,7 +388,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
PPC_ANDI(r_A, r_A, 1); PPC_ANDI(r_A, r_A, 1);
break; break;
case BPF_ANC | SKF_AD_QUEUE: case BPF_ANC | SKF_AD_QUEUE:
BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, BUILD_BUG_ON(sizeof_field(struct sk_buff,
queue_mapping) != 2); queue_mapping) != 2);
PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff, PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
queue_mapping)); queue_mapping));

View File

@ -2,8 +2,8 @@ menu "SoC selection"
config SOC_SIFIVE config SOC_SIFIVE
bool "SiFive SoCs" bool "SiFive SoCs"
select SERIAL_SIFIVE select SERIAL_SIFIVE if TTY
select SERIAL_SIFIVE_CONSOLE select SERIAL_SIFIVE_CONSOLE if TTY
select CLK_SIFIVE select CLK_SIFIVE
select CLK_SIFIVE_FU540_PRCI select CLK_SIFIVE_FU540_PRCI
select SIFIVE_PLIC select SIFIVE_PLIC

View File

@ -24,7 +24,7 @@ $(obj)/Image: vmlinux FORCE
$(obj)/Image.gz: $(obj)/Image FORCE $(obj)/Image.gz: $(obj)/Image FORCE
$(call if_changed,gzip) $(call if_changed,gzip)
loader.o: $(src)/loader.S $(obj)/Image $(obj)/loader.o: $(src)/loader.S $(obj)/Image
$(obj)/loader: $(obj)/loader.o $(obj)/Image $(obj)/loader.lds FORCE $(obj)/loader: $(obj)/loader.o $(obj)/Image $(obj)/loader.lds FORCE
$(Q)$(LD) -T $(obj)/loader.lds -o $@ $(obj)/loader.o $(Q)$(LD) -T $(obj)/loader.lds -o $@ $(obj)/loader.o

View File

@ -124,6 +124,7 @@ config S390
select HAVE_ARCH_JUMP_LABEL select HAVE_ARCH_JUMP_LABEL
select HAVE_ARCH_JUMP_LABEL_RELATIVE select HAVE_ARCH_JUMP_LABEL_RELATIVE
select HAVE_ARCH_KASAN select HAVE_ARCH_KASAN
select HAVE_ARCH_KASAN_VMALLOC
select CPU_NO_EFFICIENT_FFS if !HAVE_MARCH_Z9_109_FEATURES select CPU_NO_EFFICIENT_FFS if !HAVE_MARCH_Z9_109_FEATURES
select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_SECCOMP_FILTER
select HAVE_ARCH_SOFT_DIRTY select HAVE_ARCH_SOFT_DIRTY

View File

@ -27,7 +27,6 @@
#define MACHINE_FLAG_DIAG9C BIT(3) #define MACHINE_FLAG_DIAG9C BIT(3)
#define MACHINE_FLAG_ESOP BIT(4) #define MACHINE_FLAG_ESOP BIT(4)
#define MACHINE_FLAG_IDTE BIT(5) #define MACHINE_FLAG_IDTE BIT(5)
#define MACHINE_FLAG_DIAG44 BIT(6)
#define MACHINE_FLAG_EDAT1 BIT(7) #define MACHINE_FLAG_EDAT1 BIT(7)
#define MACHINE_FLAG_EDAT2 BIT(8) #define MACHINE_FLAG_EDAT2 BIT(8)
#define MACHINE_FLAG_TOPOLOGY BIT(10) #define MACHINE_FLAG_TOPOLOGY BIT(10)
@ -94,7 +93,6 @@ extern unsigned long __swsusp_reset_dma;
#define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C) #define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C)
#define MACHINE_HAS_ESOP (S390_lowcore.machine_flags & MACHINE_FLAG_ESOP) #define MACHINE_HAS_ESOP (S390_lowcore.machine_flags & MACHINE_FLAG_ESOP)
#define MACHINE_HAS_IDTE (S390_lowcore.machine_flags & MACHINE_FLAG_IDTE) #define MACHINE_HAS_IDTE (S390_lowcore.machine_flags & MACHINE_FLAG_IDTE)
#define MACHINE_HAS_DIAG44 (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG44)
#define MACHINE_HAS_EDAT1 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT1) #define MACHINE_HAS_EDAT1 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT1)
#define MACHINE_HAS_EDAT2 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT2) #define MACHINE_HAS_EDAT2 (S390_lowcore.machine_flags & MACHINE_FLAG_EDAT2)
#define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY) #define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY)

View File

@ -86,7 +86,7 @@ static inline int share(unsigned long addr, u16 cmd)
}; };
if (!is_prot_virt_guest()) if (!is_prot_virt_guest())
return -ENOTSUPP; return -EOPNOTSUPP;
/* /*
* Sharing is page wise, if we encounter addresses that are * Sharing is page wise, if we encounter addresses that are
* not page aligned, we assume something went wrong. If * not page aligned, we assume something went wrong. If

View File

@ -204,21 +204,6 @@ static __init void detect_diag9c(void)
S390_lowcore.machine_flags |= MACHINE_FLAG_DIAG9C; S390_lowcore.machine_flags |= MACHINE_FLAG_DIAG9C;
} }
static __init void detect_diag44(void)
{
int rc;
diag_stat_inc(DIAG_STAT_X044);
asm volatile(
" diag 0,0,0x44\n"
"0: la %0,0\n"
"1:\n"
EX_TABLE(0b,1b)
: "=d" (rc) : "0" (-EOPNOTSUPP) : "cc");
if (!rc)
S390_lowcore.machine_flags |= MACHINE_FLAG_DIAG44;
}
static __init void detect_machine_facilities(void) static __init void detect_machine_facilities(void)
{ {
if (test_facility(8)) { if (test_facility(8)) {
@ -331,7 +316,6 @@ void __init startup_init(void)
setup_arch_string(); setup_arch_string();
setup_boot_command_line(); setup_boot_command_line();
detect_diag9c(); detect_diag9c();
detect_diag44();
detect_machine_facilities(); detect_machine_facilities();
save_vector_registers(); save_vector_registers();
setup_topology(); setup_topology();

View File

@ -1303,18 +1303,28 @@ static void hw_perf_event_update(struct perf_event *event, int flush_all)
*/ */
if (flush_all && done) if (flush_all && done)
break; break;
/* If an event overflow happened, discard samples by
* processing any remaining sample-data-blocks.
*/
if (event_overflow)
flush_all = 1;
} }
/* Account sample overflows in the event hardware structure */ /* Account sample overflows in the event hardware structure */
if (sampl_overflow) if (sampl_overflow)
OVERFLOW_REG(hwc) = DIV_ROUND_UP(OVERFLOW_REG(hwc) + OVERFLOW_REG(hwc) = DIV_ROUND_UP(OVERFLOW_REG(hwc) +
sampl_overflow, 1 + num_sdb); sampl_overflow, 1 + num_sdb);
/* Perf_event_overflow() and perf_event_account_interrupt() limit
* the interrupt rate to an upper limit. Roughly 1000 samples per
* task tick.
* Hitting this limit results in a large number
* of throttled REF_REPORT_THROTTLE entries and the samples
* are dropped.
* Slightly increase the interval to avoid hitting this limit.
*/
if (event_overflow) {
SAMPL_RATE(hwc) += DIV_ROUND_UP(SAMPL_RATE(hwc), 10);
debug_sprintf_event(sfdbg, 1, "%s: rate adjustment %ld\n",
__func__,
DIV_ROUND_UP(SAMPL_RATE(hwc), 10));
}
if (sampl_overflow || event_overflow) if (sampl_overflow || event_overflow)
debug_sprintf_event(sfdbg, 4, "%s: " debug_sprintf_event(sfdbg, 4, "%s: "
"overflows: sample %llu event %llu" "overflows: sample %llu event %llu"

View File

@ -413,14 +413,11 @@ EXPORT_SYMBOL(arch_vcpu_is_preempted);
void smp_yield_cpu(int cpu) void smp_yield_cpu(int cpu)
{ {
if (MACHINE_HAS_DIAG9C) { if (!MACHINE_HAS_DIAG9C)
diag_stat_inc_norecursion(DIAG_STAT_X09C); return;
asm volatile("diag %0,0,0x9c" diag_stat_inc_norecursion(DIAG_STAT_X09C);
: : "d" (pcpu_devices[cpu].address)); asm volatile("diag %0,0,0x9c"
} else if (MACHINE_HAS_DIAG44 && !smp_cpu_mtid) { : : "d" (pcpu_devices[cpu].address));
diag_stat_inc_norecursion(DIAG_STAT_X044);
asm volatile("diag 0,0,0x44");
}
} }
/* /*

View File

@ -242,7 +242,6 @@ static inline void arch_spin_lock_classic(arch_spinlock_t *lp)
void arch_spin_lock_wait(arch_spinlock_t *lp) void arch_spin_lock_wait(arch_spinlock_t *lp)
{ {
/* Use classic spinlocks + niai if the steal time is >= 10% */
if (test_cpu_flag(CIF_DEDICATED_CPU)) if (test_cpu_flag(CIF_DEDICATED_CPU))
arch_spin_lock_queued(lp); arch_spin_lock_queued(lp);
else else

View File

@ -238,7 +238,7 @@ static int test_unwind_irq(struct unwindme *u)
{ {
preempt_disable(); preempt_disable();
if (register_external_irq(EXT_IRQ_CLK_COMP, unwindme_irq_handler)) { if (register_external_irq(EXT_IRQ_CLK_COMP, unwindme_irq_handler)) {
pr_info("Couldn't reqister external interrupt handler"); pr_info("Couldn't register external interrupt handler");
return -1; return -1;
} }
u->task = current; u->task = current;

View File

@ -82,7 +82,8 @@ static pte_t * __init kasan_early_pte_alloc(void)
enum populate_mode { enum populate_mode {
POPULATE_ONE2ONE, POPULATE_ONE2ONE,
POPULATE_MAP, POPULATE_MAP,
POPULATE_ZERO_SHADOW POPULATE_ZERO_SHADOW,
POPULATE_SHALLOW
}; };
static void __init kasan_early_vmemmap_populate(unsigned long address, static void __init kasan_early_vmemmap_populate(unsigned long address,
unsigned long end, unsigned long end,
@ -116,6 +117,12 @@ static void __init kasan_early_vmemmap_populate(unsigned long address,
pgd_populate(&init_mm, pg_dir, p4_dir); pgd_populate(&init_mm, pg_dir, p4_dir);
} }
if (IS_ENABLED(CONFIG_KASAN_S390_4_LEVEL_PAGING) &&
mode == POPULATE_SHALLOW) {
address = (address + P4D_SIZE) & P4D_MASK;
continue;
}
p4_dir = p4d_offset(pg_dir, address); p4_dir = p4d_offset(pg_dir, address);
if (p4d_none(*p4_dir)) { if (p4d_none(*p4_dir)) {
if (mode == POPULATE_ZERO_SHADOW && if (mode == POPULATE_ZERO_SHADOW &&
@ -130,6 +137,12 @@ static void __init kasan_early_vmemmap_populate(unsigned long address,
p4d_populate(&init_mm, p4_dir, pu_dir); p4d_populate(&init_mm, p4_dir, pu_dir);
} }
if (!IS_ENABLED(CONFIG_KASAN_S390_4_LEVEL_PAGING) &&
mode == POPULATE_SHALLOW) {
address = (address + PUD_SIZE) & PUD_MASK;
continue;
}
pu_dir = pud_offset(p4_dir, address); pu_dir = pud_offset(p4_dir, address);
if (pud_none(*pu_dir)) { if (pud_none(*pu_dir)) {
if (mode == POPULATE_ZERO_SHADOW && if (mode == POPULATE_ZERO_SHADOW &&
@ -195,6 +208,9 @@ static void __init kasan_early_vmemmap_populate(unsigned long address,
page = kasan_early_shadow_page; page = kasan_early_shadow_page;
pte_val(*pt_dir) = __pa(page) | pgt_prot_zero; pte_val(*pt_dir) = __pa(page) | pgt_prot_zero;
break; break;
case POPULATE_SHALLOW:
/* should never happen */
break;
} }
} }
address += PAGE_SIZE; address += PAGE_SIZE;
@ -313,22 +329,50 @@ void __init kasan_early_init(void)
init_mm.pgd = early_pg_dir; init_mm.pgd = early_pg_dir;
/* /*
* Current memory layout: * Current memory layout:
* +- 0 -------------+ +- shadow start -+ * +- 0 -------------+ +- shadow start -+
* | 1:1 ram mapping | /| 1/8 ram | * | 1:1 ram mapping | /| 1/8 ram |
* +- end of ram ----+ / +----------------+ * | | / | |
* | ... gap ... |/ | kasan | * +- end of ram ----+ / +----------------+
* +- shadow start --+ | zero | * | ... gap ... | / | |
* | 1/8 addr space | | page | * | |/ | kasan |
* +- shadow end -+ | mapping | * +- shadow start --+ | zero |
* | ... gap ... |\ | (untracked) | * | 1/8 addr space | | page |
* +- modules vaddr -+ \ +----------------+ * +- shadow end -+ | mapping |
* | 2Gb | \| unmapped | allocated per module * | ... gap ... |\ | (untracked) |
* +-----------------+ +- shadow end ---+ * +- vmalloc area -+ \ | |
* | vmalloc_size | \ | |
* +- modules vaddr -+ \ +----------------+
* | 2Gb | \| unmapped | allocated per module
* +-----------------+ +- shadow end ---+
*
* Current memory layout (KASAN_VMALLOC):
* +- 0 -------------+ +- shadow start -+
* | 1:1 ram mapping | /| 1/8 ram |
* | | / | |
* +- end of ram ----+ / +----------------+
* | ... gap ... | / | kasan |
* | |/ | zero |
* +- shadow start --+ | page |
* | 1/8 addr space | | mapping |
* +- shadow end -+ | (untracked) |
* | ... gap ... |\ | |
* +- vmalloc area -+ \ +- vmalloc area -+
* | vmalloc_size | \ |shallow populate|
* +- modules vaddr -+ \ +- modules area -+
* | 2Gb | \|shallow populate|
* +-----------------+ +- shadow end ---+
*/ */
/* populate kasan shadow (for identity mapping and zero page mapping) */ /* populate kasan shadow (for identity mapping and zero page mapping) */
kasan_early_vmemmap_populate(__sha(0), __sha(memsize), POPULATE_MAP); kasan_early_vmemmap_populate(__sha(0), __sha(memsize), POPULATE_MAP);
if (IS_ENABLED(CONFIG_MODULES)) if (IS_ENABLED(CONFIG_MODULES))
untracked_mem_end = vmax - MODULES_LEN; untracked_mem_end = vmax - MODULES_LEN;
if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
untracked_mem_end = vmax - vmalloc_size - MODULES_LEN;
/* shallowly populate kasan shadow for vmalloc and modules */
kasan_early_vmemmap_populate(__sha(untracked_mem_end),
__sha(vmax), POPULATE_SHALLOW);
}
/* populate kasan shadow for untracked memory */
kasan_early_vmemmap_populate(__sha(max_physmem_end), kasan_early_vmemmap_populate(__sha(max_physmem_end),
__sha(untracked_mem_end), __sha(untracked_mem_end),
POPULATE_ZERO_SHADOW); POPULATE_ZERO_SHADOW);

View File

@ -325,9 +325,9 @@ int __init sh_early_platform_driver_probe(char *class_str,
} }
/** /**
* sh_early_platform_cleanup - clean up early platform code * early_platform_cleanup - clean up early platform code
*/ */
static int __init sh_early_platform_cleanup(void) void __init early_platform_cleanup(void)
{ {
struct platform_device *pd, *pd2; struct platform_device *pd, *pd2;
@ -337,11 +337,4 @@ static int __init sh_early_platform_cleanup(void)
list_del(&pd->dev.devres_head); list_del(&pd->dev.devres_head);
memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head)); memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head));
} }
return 0;
} }
/*
* This must happen once after all early devices are probed but before probing
* real platform devices.
*/
subsys_initcall(sh_early_platform_cleanup);

View File

@ -266,6 +266,7 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
ptr = &remcomInBuffer[1]; ptr = &remcomInBuffer[1];
if (kgdb_hex2long(&ptr, &addr)) if (kgdb_hex2long(&ptr, &addr))
linux_regs->pc = addr; linux_regs->pc = addr;
/* fallthrough */
case 'D': case 'D':
case 'k': case 'k':
atomic_set(&kgdb_cpu_doing_single_step, -1); atomic_set(&kgdb_cpu_doing_single_step, -1);

View File

@ -180,19 +180,19 @@ do { \
#define emit_loadptr(BASE, STRUCT, FIELD, DEST) \ #define emit_loadptr(BASE, STRUCT, FIELD, DEST) \
do { unsigned int _off = offsetof(STRUCT, FIELD); \ do { unsigned int _off = offsetof(STRUCT, FIELD); \
BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(void *)); \ BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(void *)); \
*prog++ = LDPTRI | RS1(BASE) | S13(_off) | RD(DEST); \ *prog++ = LDPTRI | RS1(BASE) | S13(_off) | RD(DEST); \
} while (0) } while (0)
#define emit_load32(BASE, STRUCT, FIELD, DEST) \ #define emit_load32(BASE, STRUCT, FIELD, DEST) \
do { unsigned int _off = offsetof(STRUCT, FIELD); \ do { unsigned int _off = offsetof(STRUCT, FIELD); \
BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u32)); \ BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u32)); \
*prog++ = LD32I | RS1(BASE) | S13(_off) | RD(DEST); \ *prog++ = LD32I | RS1(BASE) | S13(_off) | RD(DEST); \
} while (0) } while (0)
#define emit_load16(BASE, STRUCT, FIELD, DEST) \ #define emit_load16(BASE, STRUCT, FIELD, DEST) \
do { unsigned int _off = offsetof(STRUCT, FIELD); \ do { unsigned int _off = offsetof(STRUCT, FIELD); \
BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u16)); \ BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u16)); \
*prog++ = LD16I | RS1(BASE) | S13(_off) | RD(DEST); \ *prog++ = LD16I | RS1(BASE) | S13(_off) | RD(DEST); \
} while (0) } while (0)
@ -202,7 +202,7 @@ do { unsigned int _off = offsetof(STRUCT, FIELD); \
} while (0) } while (0)
#define emit_load8(BASE, STRUCT, FIELD, DEST) \ #define emit_load8(BASE, STRUCT, FIELD, DEST) \
do { BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u8)); \ do { BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u8)); \
__emit_load8(BASE, STRUCT, FIELD, DEST); \ __emit_load8(BASE, STRUCT, FIELD, DEST); \
} while (0) } while (0)

View File

@ -259,7 +259,7 @@ static void __init setup_xstate_features(void)
xmm_space); xmm_space);
xstate_offsets[XFEATURE_SSE] = xstate_sizes[XFEATURE_FP]; xstate_offsets[XFEATURE_SSE] = xstate_sizes[XFEATURE_FP];
xstate_sizes[XFEATURE_SSE] = FIELD_SIZEOF(struct fxregs_state, xstate_sizes[XFEATURE_SSE] = sizeof_field(struct fxregs_state,
xmm_space); xmm_space);
for (i = FIRST_EXTENDED_XFEATURE; i < XFEATURE_MAX; i++) { for (i = FIRST_EXTENDED_XFEATURE; i < XFEATURE_MAX; i++) {

View File

@ -1042,20 +1042,6 @@ void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
if (unlikely(atomic_read(&current->tracing_graph_pause))) if (unlikely(atomic_read(&current->tracing_graph_pause)))
return; return;
/*
* If the return location is actually pointing directly to
* the start of a direct trampoline (if we trace the trampoline
* it will still be offset by MCOUNT_INSN_SIZE), then the
* return address is actually off by one word, and we
* need to adjust for that.
*/
if (ftrace_direct_func_count) {
if (ftrace_find_direct_func(self_addr + MCOUNT_INSN_SIZE)) {
self_addr = *parent;
parent++;
}
}
/* /*
* Protect against fault, even if it shouldn't * Protect against fault, even if it shouldn't
* happen. This tool is too much intrusive to * happen. This tool is too much intrusive to

View File

@ -754,10 +754,12 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,
if (WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED))) if (WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED)))
return false; return false;
if (bio->bi_vcnt > 0 && !bio_full(bio, len)) { if (bio->bi_vcnt > 0) {
struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1]; struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1];
if (page_is_mergeable(bv, page, len, off, same_page)) { if (page_is_mergeable(bv, page, len, off, same_page)) {
if (bio->bi_iter.bi_size > UINT_MAX - len)
return false;
bv->bv_len += len; bv->bv_len += len;
bio->bi_iter.bi_size += len; bio->bi_iter.bi_size += len;
return true; return true;

View File

@ -1061,26 +1061,6 @@ err_unlock:
return PTR_ERR(blkg); return PTR_ERR(blkg);
} }
/**
* blkcg_drain_queue - drain blkcg part of request_queue
* @q: request_queue to drain
*
* Called from blk_drain_queue(). Responsible for draining blkcg part.
*/
void blkcg_drain_queue(struct request_queue *q)
{
lockdep_assert_held(&q->queue_lock);
/*
* @q could be exiting and already have destroyed all blkgs as
* indicated by NULL root_blkg. If so, don't confuse policies.
*/
if (!q->root_blkg)
return;
blk_throtl_drain(q);
}
/** /**
* blkcg_exit_queue - exit and release blkcg part of request_queue * blkcg_exit_queue - exit and release blkcg part of request_queue
* @q: request_queue being released * @q: request_queue being released

View File

@ -1310,7 +1310,7 @@ EXPORT_SYMBOL_GPL(blk_rq_err_bytes);
void blk_account_io_completion(struct request *req, unsigned int bytes) void blk_account_io_completion(struct request *req, unsigned int bytes)
{ {
if (blk_do_io_stat(req)) { if (req->part && blk_do_io_stat(req)) {
const int sgrp = op_stat_group(req_op(req)); const int sgrp = op_stat_group(req_op(req));
struct hd_struct *part; struct hd_struct *part;
@ -1328,7 +1328,8 @@ void blk_account_io_done(struct request *req, u64 now)
* normal IO on queueing nor completion. Accounting the * normal IO on queueing nor completion. Accounting the
* containing request is enough. * containing request is enough.
*/ */
if (blk_do_io_stat(req) && !(req->rq_flags & RQF_FLUSH_SEQ)) { if (req->part && blk_do_io_stat(req) &&
!(req->rq_flags & RQF_FLUSH_SEQ)) {
const int sgrp = op_stat_group(req_op(req)); const int sgrp = op_stat_group(req_op(req));
struct hd_struct *part; struct hd_struct *part;
@ -1792,9 +1793,9 @@ int __init blk_dev_init(void)
{ {
BUILD_BUG_ON(REQ_OP_LAST >= (1 << REQ_OP_BITS)); BUILD_BUG_ON(REQ_OP_LAST >= (1 << REQ_OP_BITS));
BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 * BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 *
FIELD_SIZEOF(struct request, cmd_flags)); sizeof_field(struct request, cmd_flags));
BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 * BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 *
FIELD_SIZEOF(struct bio, bi_opf)); sizeof_field(struct bio, bi_opf));
/* used for unplugging and affects IO latency/throughput - HIGHPRI */ /* used for unplugging and affects IO latency/throughput - HIGHPRI */
kblockd_workqueue = alloc_workqueue("kblockd", kblockd_workqueue = alloc_workqueue("kblockd",

View File

@ -436,10 +436,10 @@ static int adiantum_init_tfm(struct crypto_skcipher *tfm)
BUILD_BUG_ON(offsetofend(struct adiantum_request_ctx, u) != BUILD_BUG_ON(offsetofend(struct adiantum_request_ctx, u) !=
sizeof(struct adiantum_request_ctx)); sizeof(struct adiantum_request_ctx));
subreq_size = max(FIELD_SIZEOF(struct adiantum_request_ctx, subreq_size = max(sizeof_field(struct adiantum_request_ctx,
u.hash_desc) + u.hash_desc) +
crypto_shash_descsize(hash), crypto_shash_descsize(hash),
FIELD_SIZEOF(struct adiantum_request_ctx, sizeof_field(struct adiantum_request_ctx,
u.streamcipher_req) + u.streamcipher_req) +
crypto_skcipher_reqsize(streamcipher)); crypto_skcipher_reqsize(streamcipher));

View File

@ -347,7 +347,7 @@ static int essiv_aead_init_tfm(struct crypto_aead *tfm)
if (IS_ERR(aead)) if (IS_ERR(aead))
return PTR_ERR(aead); return PTR_ERR(aead);
subreq_size = FIELD_SIZEOF(struct essiv_aead_request_ctx, aead_req) + subreq_size = sizeof_field(struct essiv_aead_request_ctx, aead_req) +
crypto_aead_reqsize(aead); crypto_aead_reqsize(aead);
tctx->ivoffset = offsetof(struct essiv_aead_request_ctx, aead_req) + tctx->ivoffset = offsetof(struct essiv_aead_request_ctx, aead_req) +

View File

@ -1314,9 +1314,19 @@ static void acpi_dev_pm_detach(struct device *dev, bool power_off)
*/ */
int acpi_dev_pm_attach(struct device *dev, bool power_on) int acpi_dev_pm_attach(struct device *dev, bool power_on)
{ {
/*
* Skip devices whose ACPI companions match the device IDs below,
* because they require special power management handling incompatible
* with the generic ACPI PM domain.
*/
static const struct acpi_device_id special_pm_ids[] = {
{"PNP0C0B", }, /* Generic ACPI fan */
{"INT3404", }, /* Fan */
{}
};
struct acpi_device *adev = ACPI_COMPANION(dev); struct acpi_device *adev = ACPI_COMPANION(dev);
if (!adev) if (!adev || !acpi_match_device_ids(adev, special_pm_ids))
return 0; return 0;
/* /*

View File

@ -3310,7 +3310,7 @@ static void binder_transaction(struct binder_proc *proc,
binder_size_t parent_offset; binder_size_t parent_offset;
struct binder_fd_array_object *fda = struct binder_fd_array_object *fda =
to_binder_fd_array_object(hdr); to_binder_fd_array_object(hdr);
size_t num_valid = (buffer_offset - off_start_offset) * size_t num_valid = (buffer_offset - off_start_offset) /
sizeof(binder_size_t); sizeof(binder_size_t);
struct binder_buffer_object *parent = struct binder_buffer_object *parent =
binder_validate_ptr(target_proc, t->buffer, binder_validate_ptr(target_proc, t->buffer,
@ -3384,7 +3384,7 @@ static void binder_transaction(struct binder_proc *proc,
t->buffer->user_data + sg_buf_offset; t->buffer->user_data + sg_buf_offset;
sg_buf_offset += ALIGN(bp->length, sizeof(u64)); sg_buf_offset += ALIGN(bp->length, sizeof(u64));
num_valid = (buffer_offset - off_start_offset) * num_valid = (buffer_offset - off_start_offset) /
sizeof(binder_size_t); sizeof(binder_size_t);
ret = binder_fixup_parent(t, thread, bp, ret = binder_fixup_parent(t, thread, bp,
off_start_offset, off_start_offset,

View File

@ -359,7 +359,7 @@ static int handle_remove(const char *nodename, struct device *dev)
* If configured, or requested by the commandline, devtmpfs will be * If configured, or requested by the commandline, devtmpfs will be
* auto-mounted after the kernel mounted the root filesystem. * auto-mounted after the kernel mounted the root filesystem.
*/ */
int devtmpfs_mount(const char *mntdir) int devtmpfs_mount(void)
{ {
int err; int err;
@ -369,7 +369,7 @@ int devtmpfs_mount(const char *mntdir)
if (!thread) if (!thread)
return 0; return 0;
err = ksys_mount("devtmpfs", mntdir, "devtmpfs", MS_SILENT, NULL); err = do_mount("devtmpfs", "dev", "devtmpfs", MS_SILENT, NULL);
if (err) if (err)
printk(KERN_INFO "devtmpfs: error mounting %i\n", err); printk(KERN_INFO "devtmpfs: error mounting %i\n", err);
else else
@ -394,7 +394,7 @@ static int devtmpfsd(void *p)
*err = ksys_unshare(CLONE_NEWNS); *err = ksys_unshare(CLONE_NEWNS);
if (*err) if (*err)
goto out; goto out;
*err = ksys_mount("devtmpfs", "/", "devtmpfs", MS_SILENT, NULL); *err = do_mount("devtmpfs", "/", "devtmpfs", MS_SILENT, NULL);
if (*err) if (*err)
goto out; goto out;
ksys_chdir("/.."); /* will traverse into overmounted root */ ksys_chdir("/.."); /* will traverse into overmounted root */

View File

@ -1325,10 +1325,14 @@ struct device *platform_find_device_by_driver(struct device *start,
} }
EXPORT_SYMBOL_GPL(platform_find_device_by_driver); EXPORT_SYMBOL_GPL(platform_find_device_by_driver);
void __weak __init early_platform_cleanup(void) { }
int __init platform_bus_init(void) int __init platform_bus_init(void)
{ {
int error; int error;
early_platform_cleanup();
error = device_register(&platform_bus); error = device_register(&platform_bus);
if (error) { if (error) {
put_device(&platform_bus); put_device(&platform_bus);

View File

@ -171,6 +171,15 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
blkif->domid = domid; blkif->domid = domid;
atomic_set(&blkif->refcnt, 1); atomic_set(&blkif->refcnt, 1);
init_completion(&blkif->drain_complete); init_completion(&blkif->drain_complete);
/*
* Because freeing back to the cache may be deferred, it is not
* safe to unload the module (and hence destroy the cache) until
* this has completed. To prevent premature unloading, take an
* extra module reference here and release only when the object
* has been freed back to the cache.
*/
__module_get(THIS_MODULE);
INIT_WORK(&blkif->free_work, xen_blkif_deferred_free); INIT_WORK(&blkif->free_work, xen_blkif_deferred_free);
return blkif; return blkif;
@ -320,6 +329,7 @@ static void xen_blkif_free(struct xen_blkif *blkif)
/* Make sure everything is drained before shutting down */ /* Make sure everything is drained before shutting down */
kmem_cache_free(xen_blkif_cachep, blkif); kmem_cache_free(xen_blkif_cachep, blkif);
module_put(THIS_MODULE);
} }
int __init xen_blkif_interface_init(void) int __init xen_blkif_interface_init(void)

View File

@ -381,7 +381,8 @@ u64 cpuidle_poll_time(struct cpuidle_driver *drv,
if (dev->states_usage[i].disable) if (dev->states_usage[i].disable)
continue; continue;
limit_ns = (u64)drv->states[i].target_residency_ns; limit_ns = drv->states[i].target_residency_ns;
break;
} }
dev->poll_limit_ns = limit_ns; dev->poll_limit_ns = limit_ns;

View File

@ -403,6 +403,13 @@ void cpuidle_driver_state_disabled(struct cpuidle_driver *drv, int idx,
mutex_lock(&cpuidle_lock); mutex_lock(&cpuidle_lock);
spin_lock(&cpuidle_driver_lock);
if (!drv->cpumask) {
drv->states[idx].flags |= CPUIDLE_FLAG_UNUSABLE;
goto unlock;
}
for_each_cpu(cpu, drv->cpumask) { for_each_cpu(cpu, drv->cpumask) {
struct cpuidle_device *dev = per_cpu(cpuidle_devices, cpu); struct cpuidle_device *dev = per_cpu(cpuidle_devices, cpu);
@ -415,5 +422,8 @@ void cpuidle_driver_state_disabled(struct cpuidle_driver *drv, int idx,
dev->states_usage[idx].disable &= ~CPUIDLE_STATE_DISABLED_BY_DRIVER; dev->states_usage[idx].disable &= ~CPUIDLE_STATE_DISABLED_BY_DRIVER;
} }
unlock:
spin_unlock(&cpuidle_driver_lock);
mutex_unlock(&cpuidle_lock); mutex_unlock(&cpuidle_lock);
} }

View File

@ -24,11 +24,14 @@
#include <linux/printk.h> #include <linux/printk.h>
#include <linux/hrtimer.h> #include <linux/hrtimer.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/pm_qos.h>
#include "governor.h" #include "governor.h"
#define CREATE_TRACE_POINTS #define CREATE_TRACE_POINTS
#include <trace/events/devfreq.h> #include <trace/events/devfreq.h>
#define HZ_PER_KHZ 1000
static struct class *devfreq_class; static struct class *devfreq_class;
/* /*
@ -98,6 +101,54 @@ static unsigned long find_available_max_freq(struct devfreq *devfreq)
return max_freq; return max_freq;
} }
/**
* get_freq_range() - Get the current freq range
* @devfreq: the devfreq instance
* @min_freq: the min frequency
* @max_freq: the max frequency
*
* This takes into consideration all constraints.
*/
static void get_freq_range(struct devfreq *devfreq,
unsigned long *min_freq,
unsigned long *max_freq)
{
unsigned long *freq_table = devfreq->profile->freq_table;
s32 qos_min_freq, qos_max_freq;
lockdep_assert_held(&devfreq->lock);
/*
* Initialize minimum/maximum frequency from freq table.
* The devfreq drivers can initialize this in either ascending or
* descending order and devfreq core supports both.
*/
if (freq_table[0] < freq_table[devfreq->profile->max_state - 1]) {
*min_freq = freq_table[0];
*max_freq = freq_table[devfreq->profile->max_state - 1];
} else {
*min_freq = freq_table[devfreq->profile->max_state - 1];
*max_freq = freq_table[0];
}
/* Apply constraints from PM QoS */
qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent,
DEV_PM_QOS_MIN_FREQUENCY);
qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent,
DEV_PM_QOS_MAX_FREQUENCY);
*min_freq = max(*min_freq, (unsigned long)HZ_PER_KHZ * qos_min_freq);
if (qos_max_freq != PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE)
*max_freq = min(*max_freq,
(unsigned long)HZ_PER_KHZ * qos_max_freq);
/* Apply constraints from OPP interface */
*min_freq = max(*min_freq, devfreq->scaling_min_freq);
*max_freq = min(*max_freq, devfreq->scaling_max_freq);
if (*min_freq > *max_freq)
*min_freq = *max_freq;
}
/** /**
* devfreq_get_freq_level() - Lookup freq_table for the frequency * devfreq_get_freq_level() - Lookup freq_table for the frequency
* @devfreq: the devfreq instance * @devfreq: the devfreq instance
@ -351,16 +402,7 @@ int update_devfreq(struct devfreq *devfreq)
err = devfreq->governor->get_target_freq(devfreq, &freq); err = devfreq->governor->get_target_freq(devfreq, &freq);
if (err) if (err)
return err; return err;
get_freq_range(devfreq, &min_freq, &max_freq);
/*
* Adjust the frequency with user freq, QoS and available freq.
*
* List from the highest priority
* max_freq
* min_freq
*/
max_freq = min(devfreq->scaling_max_freq, devfreq->max_freq);
min_freq = max(devfreq->scaling_min_freq, devfreq->min_freq);
if (freq < min_freq) { if (freq < min_freq) {
freq = min_freq; freq = min_freq;
@ -568,26 +610,69 @@ static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
void *devp) void *devp)
{ {
struct devfreq *devfreq = container_of(nb, struct devfreq, nb); struct devfreq *devfreq = container_of(nb, struct devfreq, nb);
int ret; int err = -EINVAL;
mutex_lock(&devfreq->lock); mutex_lock(&devfreq->lock);
devfreq->scaling_min_freq = find_available_min_freq(devfreq); devfreq->scaling_min_freq = find_available_min_freq(devfreq);
if (!devfreq->scaling_min_freq) { if (!devfreq->scaling_min_freq)
mutex_unlock(&devfreq->lock); goto out;
return -EINVAL;
}
devfreq->scaling_max_freq = find_available_max_freq(devfreq); devfreq->scaling_max_freq = find_available_max_freq(devfreq);
if (!devfreq->scaling_max_freq) { if (!devfreq->scaling_max_freq) {
mutex_unlock(&devfreq->lock); devfreq->scaling_max_freq = ULONG_MAX;
return -EINVAL; goto out;
} }
ret = update_devfreq(devfreq); err = update_devfreq(devfreq);
mutex_unlock(&devfreq->lock);
return ret; out:
mutex_unlock(&devfreq->lock);
if (err)
dev_err(devfreq->dev.parent,
"failed to update frequency from OPP notifier (%d)\n",
err);
return NOTIFY_OK;
}
/**
* qos_notifier_call() - Common handler for QoS constraints.
* @devfreq: the devfreq instance.
*/
static int qos_notifier_call(struct devfreq *devfreq)
{
int err;
mutex_lock(&devfreq->lock);
err = update_devfreq(devfreq);
mutex_unlock(&devfreq->lock);
if (err)
dev_err(devfreq->dev.parent,
"failed to update frequency from PM QoS (%d)\n",
err);
return NOTIFY_OK;
}
/**
* qos_min_notifier_call() - Callback for QoS min_freq changes.
* @nb: Should be devfreq->nb_min
*/
static int qos_min_notifier_call(struct notifier_block *nb,
unsigned long val, void *ptr)
{
return qos_notifier_call(container_of(nb, struct devfreq, nb_min));
}
/**
* qos_max_notifier_call() - Callback for QoS max_freq changes.
* @nb: Should be devfreq->nb_max
*/
static int qos_max_notifier_call(struct notifier_block *nb,
unsigned long val, void *ptr)
{
return qos_notifier_call(container_of(nb, struct devfreq, nb_max));
} }
/** /**
@ -599,16 +684,36 @@ static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
static void devfreq_dev_release(struct device *dev) static void devfreq_dev_release(struct device *dev)
{ {
struct devfreq *devfreq = to_devfreq(dev); struct devfreq *devfreq = to_devfreq(dev);
int err;
mutex_lock(&devfreq_list_lock); mutex_lock(&devfreq_list_lock);
if (IS_ERR(find_device_devfreq(devfreq->dev.parent))) {
mutex_unlock(&devfreq_list_lock);
dev_warn(&devfreq->dev, "releasing devfreq which doesn't exist\n");
return;
}
list_del(&devfreq->node); list_del(&devfreq->node);
mutex_unlock(&devfreq_list_lock); mutex_unlock(&devfreq_list_lock);
err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max,
DEV_PM_QOS_MAX_FREQUENCY);
if (err && err != -ENOENT)
dev_warn(dev->parent,
"Failed to remove max_freq notifier: %d\n", err);
err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min,
DEV_PM_QOS_MIN_FREQUENCY);
if (err && err != -ENOENT)
dev_warn(dev->parent,
"Failed to remove min_freq notifier: %d\n", err);
if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) {
err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req);
if (err)
dev_warn(dev->parent,
"Failed to remove max_freq request: %d\n", err);
}
if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) {
err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req);
if (err)
dev_warn(dev->parent,
"Failed to remove min_freq request: %d\n", err);
}
if (devfreq->profile->exit) if (devfreq->profile->exit)
devfreq->profile->exit(devfreq->dev.parent); devfreq->profile->exit(devfreq->dev.parent);
@ -660,6 +765,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
devfreq->dev.parent = dev; devfreq->dev.parent = dev;
devfreq->dev.class = devfreq_class; devfreq->dev.class = devfreq_class;
devfreq->dev.release = devfreq_dev_release; devfreq->dev.release = devfreq_dev_release;
INIT_LIST_HEAD(&devfreq->node);
devfreq->profile = profile; devfreq->profile = profile;
strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN); strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
devfreq->previous_freq = profile->initial_freq; devfreq->previous_freq = profile->initial_freq;
@ -681,7 +787,6 @@ struct devfreq *devfreq_add_device(struct device *dev,
err = -EINVAL; err = -EINVAL;
goto err_dev; goto err_dev;
} }
devfreq->min_freq = devfreq->scaling_min_freq;
devfreq->scaling_max_freq = find_available_max_freq(devfreq); devfreq->scaling_max_freq = find_available_max_freq(devfreq);
if (!devfreq->scaling_max_freq) { if (!devfreq->scaling_max_freq) {
@ -689,7 +794,6 @@ struct devfreq *devfreq_add_device(struct device *dev,
err = -EINVAL; err = -EINVAL;
goto err_dev; goto err_dev;
} }
devfreq->max_freq = devfreq->scaling_max_freq;
devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
atomic_set(&devfreq->suspend_count, 0); atomic_set(&devfreq->suspend_count, 0);
@ -730,6 +834,28 @@ struct devfreq *devfreq_add_device(struct device *dev,
mutex_unlock(&devfreq->lock); mutex_unlock(&devfreq->lock);
err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
DEV_PM_QOS_MIN_FREQUENCY, 0);
if (err < 0)
goto err_devfreq;
err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
DEV_PM_QOS_MAX_FREQUENCY,
PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
if (err < 0)
goto err_devfreq;
devfreq->nb_min.notifier_call = qos_min_notifier_call;
err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min,
DEV_PM_QOS_MIN_FREQUENCY);
if (err)
goto err_devfreq;
devfreq->nb_max.notifier_call = qos_max_notifier_call;
err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max,
DEV_PM_QOS_MAX_FREQUENCY);
if (err)
goto err_devfreq;
mutex_lock(&devfreq_list_lock); mutex_lock(&devfreq_list_lock);
governor = try_then_request_governor(devfreq->governor_name); governor = try_then_request_governor(devfreq->governor_name);
@ -1303,41 +1429,37 @@ static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
unsigned long value; unsigned long value;
int ret; int ret;
/*
* Protect against theoretical sysfs writes between
* device_add and dev_pm_qos_add_request
*/
if (!dev_pm_qos_request_active(&df->user_min_freq_req))
return -EAGAIN;
ret = sscanf(buf, "%lu", &value); ret = sscanf(buf, "%lu", &value);
if (ret != 1) if (ret != 1)
return -EINVAL; return -EINVAL;
mutex_lock(&df->lock); /* Round down to kHz for PM QoS */
ret = dev_pm_qos_update_request(&df->user_min_freq_req,
value / HZ_PER_KHZ);
if (ret < 0)
return ret;
if (value) { return count;
if (value > df->max_freq) {
ret = -EINVAL;
goto unlock;
}
} else {
unsigned long *freq_table = df->profile->freq_table;
/* Get minimum frequency according to sorting order */
if (freq_table[0] < freq_table[df->profile->max_state - 1])
value = freq_table[0];
else
value = freq_table[df->profile->max_state - 1];
}
df->min_freq = value;
update_devfreq(df);
ret = count;
unlock:
mutex_unlock(&df->lock);
return ret;
} }
static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr, static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct devfreq *df = to_devfreq(dev); struct devfreq *df = to_devfreq(dev);
unsigned long min_freq, max_freq;
return sprintf(buf, "%lu\n", max(df->scaling_min_freq, df->min_freq)); mutex_lock(&df->lock);
get_freq_range(df, &min_freq, &max_freq);
mutex_unlock(&df->lock);
return sprintf(buf, "%lu\n", min_freq);
} }
static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr, static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
@ -1347,33 +1469,37 @@ static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
unsigned long value; unsigned long value;
int ret; int ret;
/*
* Protect against theoretical sysfs writes between
* device_add and dev_pm_qos_add_request
*/
if (!dev_pm_qos_request_active(&df->user_max_freq_req))
return -EINVAL;
ret = sscanf(buf, "%lu", &value); ret = sscanf(buf, "%lu", &value);
if (ret != 1) if (ret != 1)
return -EINVAL; return -EINVAL;
mutex_lock(&df->lock); /*
* PM QoS frequencies are in kHz so we need to convert. Convert by
* rounding upwards so that the acceptable interval never shrinks.
*
* For example if the user writes "666666666" to sysfs this value will
* be converted to 666667 kHz and back to 666667000 Hz before an OPP
* lookup, this ensures that an OPP of 666666666Hz is still accepted.
*
* A value of zero means "no limit".
*/
if (value)
value = DIV_ROUND_UP(value, HZ_PER_KHZ);
else
value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
if (value) { ret = dev_pm_qos_update_request(&df->user_max_freq_req, value);
if (value < df->min_freq) { if (ret < 0)
ret = -EINVAL; return ret;
goto unlock;
}
} else {
unsigned long *freq_table = df->profile->freq_table;
/* Get maximum frequency according to sorting order */ return count;
if (freq_table[0] < freq_table[df->profile->max_state - 1])
value = freq_table[df->profile->max_state - 1];
else
value = freq_table[0];
}
df->max_freq = value;
update_devfreq(df);
ret = count;
unlock:
mutex_unlock(&df->lock);
return ret;
} }
static DEVICE_ATTR_RW(min_freq); static DEVICE_ATTR_RW(min_freq);
@ -1381,8 +1507,13 @@ static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct devfreq *df = to_devfreq(dev); struct devfreq *df = to_devfreq(dev);
unsigned long min_freq, max_freq;
return sprintf(buf, "%lu\n", min(df->scaling_max_freq, df->max_freq)); mutex_lock(&df->lock);
get_freq_range(df, &min_freq, &max_freq);
mutex_unlock(&df->lock);
return sprintf(buf, "%lu\n", max_freq);
} }
static DEVICE_ATTR_RW(max_freq); static DEVICE_ATTR_RW(max_freq);

View File

@ -221,7 +221,7 @@ static struct sync_file *sync_file_merge(const char *name, struct sync_file *a,
a_fences = get_fences(a, &a_num_fences); a_fences = get_fences(a, &a_num_fences);
b_fences = get_fences(b, &b_num_fences); b_fences = get_fences(b, &b_num_fences);
if (a_num_fences > INT_MAX - b_num_fences) if (a_num_fences > INT_MAX - b_num_fences)
return NULL; goto err;
num_fences = a_num_fences + b_num_fences; num_fences = a_num_fences + b_num_fences;

View File

@ -681,7 +681,7 @@ device_initcall(efi_load_efivars);
{ name }, \ { name }, \
{ prop }, \ { prop }, \
offsetof(struct efi_fdt_params, field), \ offsetof(struct efi_fdt_params, field), \
FIELD_SIZEOF(struct efi_fdt_params, field) \ sizeof_field(struct efi_fdt_params, field) \
} }
struct params { struct params {

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: MIT
menu "ACP (Audio CoProcessor) Configuration" menu "ACP (Audio CoProcessor) Configuration"
config DRM_AMD_ACP config DRM_AMD_ACP

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: MIT
config DRM_AMDGPU_SI config DRM_AMDGPU_SI
bool "Enable amdgpu support for SI parts" bool "Enable amdgpu support for SI parts"
depends on DRM_AMDGPU depends on DRM_AMDGPU

Some files were not shown because too many files have changed in this diff Show More