Linux 5.16-rc5
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmG2fU0eHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGC7EH/3R7Rt+OD8Wn8Ss3 w8V+dBxVwa2u2oMTyUHPxaeOXZ7bi38XlUdLFPOK/76bGwO0a5TmYZqsWdRbGyT0 HfcYjHsQ0lbJXk/nh2oM47oJxJXVpThIHXJEk0FZ0Y5t+DYjIYlNHzqZymUyhLem St74zgWcyT+MXuqY34vB827FJDUnOxhhhi85tObeunaSPAomy9aiYidSC1ARREnz iz2VUntP/QnRnKVvL2nUZNzcz1xL5vfCRSKsRGRSv3qW1Y/1M71ylt6JVmSftWq+ VmMdFxFhdrb1OK/1ct/930Un/UP2NG9EJsWxote2XYlnVSZHzDqH7lUhbqgdCcLz 1m2tVNY= =7wRd -----END PGP SIGNATURE----- Merge tag 'v5.16-rc5' into locking/core, to pick up fixes Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
6773cc31a9
5
.mailmap
5
.mailmap
|
@ -71,6 +71,9 @@ Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
|
||||||
Chao Yu <chao@kernel.org> <yuchao0@huawei.com>
|
Chao Yu <chao@kernel.org> <yuchao0@huawei.com>
|
||||||
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessm.com>
|
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessm.com>
|
||||||
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessos.org>
|
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessos.org>
|
||||||
|
Christian Borntraeger <borntraeger@linux.ibm.com> <borntraeger@de.ibm.com>
|
||||||
|
Christian Borntraeger <borntraeger@linux.ibm.com> <cborntra@de.ibm.com>
|
||||||
|
Christian Borntraeger <borntraeger@linux.ibm.com> <borntrae@de.ibm.com>
|
||||||
Christophe Ricard <christophe.ricard@gmail.com>
|
Christophe Ricard <christophe.ricard@gmail.com>
|
||||||
Christoph Hellwig <hch@lst.de>
|
Christoph Hellwig <hch@lst.de>
|
||||||
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
|
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
|
||||||
|
@ -123,6 +126,8 @@ Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
Greg Kroah-Hartman <greg@kroah.com>
|
Greg Kroah-Hartman <greg@kroah.com>
|
||||||
Greg Kurz <groug@kaod.org> <gkurz@linux.vnet.ibm.com>
|
Greg Kurz <groug@kaod.org> <gkurz@linux.vnet.ibm.com>
|
||||||
Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com>
|
Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com>
|
||||||
|
Guo Ren <guoren@kernel.org> <guoren@linux.alibaba.com>
|
||||||
|
Guo Ren <guoren@kernel.org> <ren_guo@c-sky.com>
|
||||||
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
||||||
Gustavo Padovan <padovan@profusion.mobi>
|
Gustavo Padovan <padovan@profusion.mobi>
|
||||||
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
||||||
|
|
|
@ -25,6 +25,6 @@ Sub graphs of DRBD's state transitions
|
||||||
:alt: disk-states-8.dot
|
:alt: disk-states-8.dot
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. kernel-figure:: node-states-8.dot
|
.. kernel-figure:: peer-states-8.dot
|
||||||
:alt: node-states-8.dot
|
:alt: peer-states-8.dot
|
||||||
:align: center
|
:align: center
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
digraph node_states {
|
|
||||||
Secondary -> Primary [ label = "ioctl_set_state()" ]
|
|
||||||
Primary -> Secondary [ label = "ioctl_set_state()" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
digraph peer_states {
|
digraph peer_states {
|
||||||
Secondary -> Primary [ label = "recv state packet" ]
|
Secondary -> Primary [ label = "recv state packet" ]
|
||||||
Primary -> Secondary [ label = "recv state packet" ]
|
Primary -> Secondary [ label = "recv state packet" ]
|
|
@ -1520,15 +1520,15 @@ This sysfs attribute controls the keyboard "face" that will be shown on the
|
||||||
Lenovo X1 Carbon 2nd gen (2014)'s adaptive keyboard. The value can be read
|
Lenovo X1 Carbon 2nd gen (2014)'s adaptive keyboard. The value can be read
|
||||||
and set.
|
and set.
|
||||||
|
|
||||||
- 1 = Home mode
|
- 0 = Home mode
|
||||||
- 2 = Web-browser mode
|
- 1 = Web-browser mode
|
||||||
- 3 = Web-conference mode
|
- 2 = Web-conference mode
|
||||||
- 4 = Function mode
|
- 3 = Function mode
|
||||||
- 5 = Layflat mode
|
- 4 = Layflat mode
|
||||||
|
|
||||||
For more details about which buttons will appear depending on the mode, please
|
For more details about which buttons will appear depending on the mode, please
|
||||||
review the laptop's user guide:
|
review the laptop's user guide:
|
||||||
http://www.lenovo.com/shop/americas/content/user_guides/x1carbon_2_ug_en.pdf
|
https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/x1carbon_2_ug_en.pdf
|
||||||
|
|
||||||
Battery charge control
|
Battery charge control
|
||||||
----------------------
|
----------------------
|
||||||
|
|
|
@ -1099,7 +1099,7 @@ task_delayacct
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Enables/disables task delay accounting (see
|
Enables/disables task delay accounting (see
|
||||||
:doc:`accounting/delay-accounting.rst`). Enabling this feature incurs
|
Documentation/accounting/delay-accounting.rst. Enabling this feature incurs
|
||||||
a small amount of overhead in the scheduler but is useful for debugging
|
a small amount of overhead in the scheduler but is useful for debugging
|
||||||
and performance tuning. It is required by some tools such as iotop.
|
and performance tuning. It is required by some tools such as iotop.
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,8 @@ Discovery family
|
||||||
|
|
||||||
Not supported by the Linux kernel.
|
Not supported by the Linux kernel.
|
||||||
|
|
||||||
|
Homepage:
|
||||||
|
https://web.archive.org/web/20110924171043/http://www.marvell.com/embedded-processors/discovery-innovation/
|
||||||
Core:
|
Core:
|
||||||
Feroceon 88fr571-vd ARMv5 compatible
|
Feroceon 88fr571-vd ARMv5 compatible
|
||||||
|
|
||||||
|
@ -120,6 +122,7 @@ EBU Armada family
|
||||||
- 88F6707
|
- 88F6707
|
||||||
- 88F6W11
|
- 88F6W11
|
||||||
|
|
||||||
|
- Product infos: https://web.archive.org/web/20141002083258/http://www.marvell.com/embedded-processors/armada-370/
|
||||||
- Product Brief: https://web.archive.org/web/20121115063038/http://www.marvell.com/embedded-processors/armada-300/assets/Marvell_ARMADA_370_SoC.pdf
|
- Product Brief: https://web.archive.org/web/20121115063038/http://www.marvell.com/embedded-processors/armada-300/assets/Marvell_ARMADA_370_SoC.pdf
|
||||||
- Hardware Spec: https://web.archive.org/web/20140617183747/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA370-datasheet.pdf
|
- Hardware Spec: https://web.archive.org/web/20140617183747/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA370-datasheet.pdf
|
||||||
- Functional Spec: https://web.archive.org/web/20140617183701/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA370-FunctionalSpec-datasheet.pdf
|
- Functional Spec: https://web.archive.org/web/20140617183701/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA370-FunctionalSpec-datasheet.pdf
|
||||||
|
@ -127,9 +130,29 @@ EBU Armada family
|
||||||
Core:
|
Core:
|
||||||
Sheeva ARMv7 compatible PJ4B
|
Sheeva ARMv7 compatible PJ4B
|
||||||
|
|
||||||
|
Armada XP Flavors:
|
||||||
|
- MV78230
|
||||||
|
- MV78260
|
||||||
|
- MV78460
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
not to be confused with the non-SMP 78xx0 SoCs
|
||||||
|
|
||||||
|
- Product infos: https://web.archive.org/web/20150101215721/http://www.marvell.com/embedded-processors/armada-xp/
|
||||||
|
- Product Brief: https://web.archive.org/web/20121021173528/http://www.marvell.com/embedded-processors/armada-xp/assets/Marvell-ArmadaXP-SoC-product%20brief.pdf
|
||||||
|
- Functional Spec: https://web.archive.org/web/20180829171131/http://www.marvell.com/embedded-processors/armada-xp/assets/ARMADA-XP-Functional-SpecDatasheet.pdf
|
||||||
|
- Hardware Specs:
|
||||||
|
- https://web.archive.org/web/20141127013651/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78230_OS.PDF
|
||||||
|
- https://web.archive.org/web/20141222000224/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78260_OS.PDF
|
||||||
|
- https://web.archive.org/web/20141222000230/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78460_OS.PDF
|
||||||
|
|
||||||
|
Core:
|
||||||
|
Sheeva ARMv7 compatible Dual-core or Quad-core PJ4B-MP
|
||||||
|
|
||||||
Armada 375 Flavors:
|
Armada 375 Flavors:
|
||||||
- 88F6720
|
- 88F6720
|
||||||
|
|
||||||
|
- Product infos: https://web.archive.org/web/20140108032402/http://www.marvell.com/embedded-processors/armada-375/
|
||||||
- Product Brief: https://web.archive.org/web/20131216023516/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA_375_SoC-01_product_brief.pdf
|
- Product Brief: https://web.archive.org/web/20131216023516/http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA_375_SoC-01_product_brief.pdf
|
||||||
|
|
||||||
Core:
|
Core:
|
||||||
|
@ -162,29 +185,6 @@ EBU Armada family
|
||||||
Core:
|
Core:
|
||||||
ARM Cortex-A9
|
ARM Cortex-A9
|
||||||
|
|
||||||
Armada XP Flavors:
|
|
||||||
- MV78230
|
|
||||||
- MV78260
|
|
||||||
- MV78460
|
|
||||||
|
|
||||||
NOTE:
|
|
||||||
not to be confused with the non-SMP 78xx0 SoCs
|
|
||||||
|
|
||||||
Product Brief:
|
|
||||||
https://web.archive.org/web/20121021173528/http://www.marvell.com/embedded-processors/armada-xp/assets/Marvell-ArmadaXP-SoC-product%20brief.pdf
|
|
||||||
|
|
||||||
Functional Spec:
|
|
||||||
https://web.archive.org/web/20180829171131/http://www.marvell.com/embedded-processors/armada-xp/assets/ARMADA-XP-Functional-SpecDatasheet.pdf
|
|
||||||
|
|
||||||
- Hardware Specs:
|
|
||||||
|
|
||||||
- https://web.archive.org/web/20141127013651/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78230_OS.PDF
|
|
||||||
- https://web.archive.org/web/20141222000224/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78260_OS.PDF
|
|
||||||
- https://web.archive.org/web/20141222000230/http://www.marvell.com/embedded-processors/armada-xp/assets/HW_MV78460_OS.PDF
|
|
||||||
|
|
||||||
Core:
|
|
||||||
Sheeva ARMv7 compatible Dual-core or Quad-core PJ4B-MP
|
|
||||||
|
|
||||||
Linux kernel mach directory:
|
Linux kernel mach directory:
|
||||||
arch/arm/mach-mvebu
|
arch/arm/mach-mvebu
|
||||||
Linux kernel plat directory:
|
Linux kernel plat directory:
|
||||||
|
@ -436,7 +436,7 @@ Berlin family (Multimedia Solutions)
|
||||||
- Flavors:
|
- Flavors:
|
||||||
- 88DE3010, Armada 1000 (no Linux support)
|
- 88DE3010, Armada 1000 (no Linux support)
|
||||||
- Core: Marvell PJ1 (ARMv5TE), Dual-core
|
- Core: Marvell PJ1 (ARMv5TE), Dual-core
|
||||||
- Product Brief: http://www.marvell.com.cn/digital-entertainment/assets/armada_1000_pb.pdf
|
- Product Brief: https://web.archive.org/web/20131103162620/http://www.marvell.com/digital-entertainment/assets/armada_1000_pb.pdf
|
||||||
- 88DE3005, Armada 1500 Mini
|
- 88DE3005, Armada 1500 Mini
|
||||||
- Design name: BG2CD
|
- Design name: BG2CD
|
||||||
- Core: ARM Cortex-A9, PL310 L2CC
|
- Core: ARM Cortex-A9, PL310 L2CC
|
||||||
|
|
|
@ -53,11 +53,10 @@ The number of bits that the PAC occupies in a pointer is 55 minus the
|
||||||
virtual address size configured by the kernel. For example, with a
|
virtual address size configured by the kernel. For example, with a
|
||||||
virtual address size of 48, the PAC is 7 bits wide.
|
virtual address size of 48, the PAC is 7 bits wide.
|
||||||
|
|
||||||
Recent versions of GCC can compile code with APIAKey-based return
|
When ARM64_PTR_AUTH_KERNEL is selected, the kernel will be compiled
|
||||||
address protection when passed the -msign-return-address option. This
|
with HINT space pointer authentication instructions protecting
|
||||||
uses instructions in the HINT space (unless -march=armv8.3-a or higher
|
function returns. Kernels built with this option will work on hardware
|
||||||
is also passed), and such code can run on systems without the pointer
|
with or without pointer authentication support.
|
||||||
authentication extension.
|
|
||||||
|
|
||||||
In addition to exec(), keys can also be reinitialized to random values
|
In addition to exec(), keys can also be reinitialized to random values
|
||||||
using the PR_PAC_RESET_KEYS prctl. A bitmask of PR_PAC_APIAKEY,
|
using the PR_PAC_RESET_KEYS prctl. A bitmask of PR_PAC_APIAKEY,
|
||||||
|
|
|
@ -15,7 +15,7 @@ that goes into great technical depth about the BPF Architecture.
|
||||||
libbpf
|
libbpf
|
||||||
======
|
======
|
||||||
|
|
||||||
Documentation/bpf/libbpf/libbpf.rst is a userspace library for loading and interacting with bpf programs.
|
Documentation/bpf/libbpf/index.rst is a userspace library for loading and interacting with bpf programs.
|
||||||
|
|
||||||
BPF Type Format (BTF)
|
BPF Type Format (BTF)
|
||||||
=====================
|
=====================
|
||||||
|
|
|
@ -249,11 +249,16 @@ except ImportError:
|
||||||
|
|
||||||
html_static_path = ['sphinx-static']
|
html_static_path = ['sphinx-static']
|
||||||
|
|
||||||
html_context = {
|
html_css_files = [
|
||||||
'css_files': [
|
'theme_overrides.css',
|
||||||
'_static/theme_overrides.css',
|
]
|
||||||
],
|
|
||||||
}
|
if major <= 1 and minor < 8:
|
||||||
|
html_context = {
|
||||||
|
'css_files': [
|
||||||
|
'_static/theme_overrides.css',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
|
|
@ -73,12 +73,12 @@ CPUFREQ_POSTCHANGE.
|
||||||
The third argument is a struct cpufreq_freqs with the following
|
The third argument is a struct cpufreq_freqs with the following
|
||||||
values:
|
values:
|
||||||
|
|
||||||
===== ===========================
|
====== ======================================
|
||||||
cpu number of the affected CPU
|
policy a pointer to the struct cpufreq_policy
|
||||||
old old frequency
|
old old frequency
|
||||||
new new frequency
|
new new frequency
|
||||||
flags flags of the cpufreq driver
|
flags flags of the cpufreq driver
|
||||||
===== ===========================
|
====== ======================================
|
||||||
|
|
||||||
3. CPUFreq Table Generation with Operating Performance Point (OPP)
|
3. CPUFreq Table Generation with Operating Performance Point (OPP)
|
||||||
==================================================================
|
==================================================================
|
||||||
|
|
|
@ -17,9 +17,10 @@ properties:
|
||||||
oneOf:
|
oneOf:
|
||||||
- enum:
|
- enum:
|
||||||
- fsl,imx7ulp-lpi2c
|
- fsl,imx7ulp-lpi2c
|
||||||
- fsl,imx8qm-lpi2c
|
|
||||||
- items:
|
- items:
|
||||||
- const: fsl,imx8qxp-lpi2c
|
- enum:
|
||||||
|
- fsl,imx8qxp-lpi2c
|
||||||
|
- fsl,imx8qm-lpi2c
|
||||||
- const: fsl,imx7ulp-lpi2c
|
- const: fsl,imx7ulp-lpi2c
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
|
|
@ -136,7 +136,7 @@ examples:
|
||||||
samsung,syscon-phandle = <&pmu_system_controller>;
|
samsung,syscon-phandle = <&pmu_system_controller>;
|
||||||
|
|
||||||
/* NTC thermistor is a hwmon device */
|
/* NTC thermistor is a hwmon device */
|
||||||
ncp15wb473 {
|
thermistor {
|
||||||
compatible = "murata,ncp15wb473";
|
compatible = "murata,ncp15wb473";
|
||||||
pullup-uv = <1800000>;
|
pullup-uv = <1800000>;
|
||||||
pullup-ohm = <47000>;
|
pullup-ohm = <47000>;
|
||||||
|
|
|
@ -142,7 +142,7 @@ examples:
|
||||||
down {
|
down {
|
||||||
label = "GPIO Key DOWN";
|
label = "GPIO Key DOWN";
|
||||||
linux,code = <108>;
|
linux,code = <108>;
|
||||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
|
interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,8 @@ properties:
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
data-lanes:
|
data-lanes:
|
||||||
|
description:
|
||||||
|
Note that 'fsl,imx7-mipi-csi2' only supports up to 2 data lines.
|
||||||
items:
|
items:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
|
@ -91,18 +93,6 @@ properties:
|
||||||
required:
|
required:
|
||||||
- data-lanes
|
- data-lanes
|
||||||
|
|
||||||
allOf:
|
|
||||||
- if:
|
|
||||||
properties:
|
|
||||||
compatible:
|
|
||||||
contains:
|
|
||||||
const: fsl,imx7-mipi-csi2
|
|
||||||
then:
|
|
||||||
properties:
|
|
||||||
data-lanes:
|
|
||||||
items:
|
|
||||||
maxItems: 2
|
|
||||||
|
|
||||||
port@1:
|
port@1:
|
||||||
$ref: /schemas/graph.yaml#/properties/port
|
$ref: /schemas/graph.yaml#/properties/port
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -91,6 +91,14 @@ properties:
|
||||||
compensate for the board being designed with the lanes
|
compensate for the board being designed with the lanes
|
||||||
swapped.
|
swapped.
|
||||||
|
|
||||||
|
enet-phy-lane-no-swap:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/flag
|
||||||
|
description:
|
||||||
|
If set, indicates that PHY will disable swap of the
|
||||||
|
TX/RX lanes. This property allows the PHY to work correcly after
|
||||||
|
e.g. wrong bootstrap configuration caused by issues in PCB
|
||||||
|
layout design.
|
||||||
|
|
||||||
eee-broken-100tx:
|
eee-broken-100tx:
|
||||||
$ref: /schemas/types.yaml#/definitions/flag
|
$ref: /schemas/types.yaml#/definitions/flag
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -29,7 +29,7 @@ properties:
|
||||||
- PHY_TYPE_PCIE
|
- PHY_TYPE_PCIE
|
||||||
- PHY_TYPE_SATA
|
- PHY_TYPE_SATA
|
||||||
- PHY_TYPE_SGMII
|
- PHY_TYPE_SGMII
|
||||||
- PHY_TYPE_USB
|
- PHY_TYPE_USB3
|
||||||
- description: The PHY instance
|
- description: The PHY instance
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 1 # for DP, SATA or USB
|
maximum: 1 # for DP, SATA or USB
|
||||||
|
|
|
@ -105,7 +105,7 @@ examples:
|
||||||
reg = <0x65>;
|
reg = <0x65>;
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
|
interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
|
||||||
ti,watchdog-timer = <0>;
|
ti,watchdog-timeout-ms = <0>;
|
||||||
ti,sc-ocp-limit-microamp = <2000000>;
|
ti,sc-ocp-limit-microamp = <2000000>;
|
||||||
ti,sc-ovp-limit-microvolt = <17800000>;
|
ti,sc-ovp-limit-microvolt = <17800000>;
|
||||||
monitored-battery = <&bat>;
|
monitored-battery = <&bat>;
|
||||||
|
|
|
@ -19,6 +19,9 @@ properties:
|
||||||
clocks:
|
clocks:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
"#sound-dai-cells":
|
"#sound-dai-cells":
|
||||||
const: 0
|
const: 0
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ properties:
|
||||||
- rockchip,rk3328-spi
|
- rockchip,rk3328-spi
|
||||||
- rockchip,rk3368-spi
|
- rockchip,rk3368-spi
|
||||||
- rockchip,rk3399-spi
|
- rockchip,rk3399-spi
|
||||||
|
- rockchip,rk3568-spi
|
||||||
- rockchip,rv1126-spi
|
- rockchip,rv1126-spi
|
||||||
- const: rockchip,rk3066-spi
|
- const: rockchip,rk3066-spi
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ Sphinx Install
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The ReST markups currently used by the Documentation/ files are meant to be
|
The ReST markups currently used by the Documentation/ files are meant to be
|
||||||
built with ``Sphinx`` version 1.3 or higher.
|
built with ``Sphinx`` version 1.7 or higher.
|
||||||
|
|
||||||
There's a script that checks for the Sphinx requirements. Please see
|
There's a script that checks for the Sphinx requirements. Please see
|
||||||
:ref:`sphinx-pre-install` for further details.
|
:ref:`sphinx-pre-install` for further details.
|
||||||
|
@ -43,10 +43,6 @@ or ``virtualenv``, depending on how your distribution packaged Python 3.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
#) Sphinx versions below 1.5 don't work properly with Python's
|
|
||||||
docutils version 0.13.1 or higher. So, if you're willing to use
|
|
||||||
those versions, you should run ``pip install 'docutils==0.12'``.
|
|
||||||
|
|
||||||
#) It is recommended to use the RTD theme for html output. Depending
|
#) It is recommended to use the RTD theme for html output. Depending
|
||||||
on the Sphinx version, it should be installed separately,
|
on the Sphinx version, it should be installed separately,
|
||||||
with ``pip install sphinx_rtd_theme``.
|
with ``pip install sphinx_rtd_theme``.
|
||||||
|
@ -55,13 +51,13 @@ or ``virtualenv``, depending on how your distribution packaged Python 3.
|
||||||
those expressions are written using LaTeX notation. It needs texlive
|
those expressions are written using LaTeX notation. It needs texlive
|
||||||
installed with amsfonts and amsmath in order to evaluate them.
|
installed with amsfonts and amsmath in order to evaluate them.
|
||||||
|
|
||||||
In summary, if you want to install Sphinx version 1.7.9, you should do::
|
In summary, if you want to install Sphinx version 2.4.4, you should do::
|
||||||
|
|
||||||
$ virtualenv sphinx_1.7.9
|
$ virtualenv sphinx_2.4.4
|
||||||
$ . sphinx_1.7.9/bin/activate
|
$ . sphinx_2.4.4/bin/activate
|
||||||
(sphinx_1.7.9) $ pip install -r Documentation/sphinx/requirements.txt
|
(sphinx_2.4.4) $ pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
After running ``. sphinx_1.7.9/bin/activate``, the prompt will change,
|
After running ``. sphinx_2.4.4/bin/activate``, the prompt will change,
|
||||||
in order to indicate that you're using the new environment. If you
|
in order to indicate that you're using the new environment. If you
|
||||||
open a new shell, you need to rerun this command to enter again at
|
open a new shell, you need to rerun this command to enter again at
|
||||||
the virtual environment before building the documentation.
|
the virtual environment before building the documentation.
|
||||||
|
@ -81,7 +77,7 @@ output.
|
||||||
PDF and LaTeX builds
|
PDF and LaTeX builds
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Such builds are currently supported only with Sphinx versions 1.4 and higher.
|
Such builds are currently supported only with Sphinx versions 2.4 and higher.
|
||||||
|
|
||||||
For PDF and LaTeX output, you'll also need ``XeLaTeX`` version 3.14159265.
|
For PDF and LaTeX output, you'll also need ``XeLaTeX`` version 3.14159265.
|
||||||
|
|
||||||
|
@ -104,8 +100,8 @@ command line options for your distro::
|
||||||
You should run:
|
You should run:
|
||||||
|
|
||||||
sudo dnf install -y texlive-luatex85
|
sudo dnf install -y texlive-luatex85
|
||||||
/usr/bin/virtualenv sphinx_1.7.9
|
/usr/bin/virtualenv sphinx_2.4.4
|
||||||
. sphinx_1.7.9/bin/activate
|
. sphinx_2.4.4/bin/activate
|
||||||
pip install -r Documentation/sphinx/requirements.txt
|
pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
||||||
|
|
|
@ -35,7 +35,7 @@ This document describes only the kernel module and the interactions
|
||||||
required with any user-space program. Subsequent text refers to this
|
required with any user-space program. Subsequent text refers to this
|
||||||
as the "automount daemon" or simply "the daemon".
|
as the "automount daemon" or simply "the daemon".
|
||||||
|
|
||||||
"autofs" is a Linux kernel module with provides the "autofs"
|
"autofs" is a Linux kernel module which provides the "autofs"
|
||||||
filesystem type. Several "autofs" filesystems can be mounted and they
|
filesystem type. Several "autofs" filesystems can be mounted and they
|
||||||
can each be managed separately, or all managed by the same daemon.
|
can each be managed separately, or all managed by the same daemon.
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,11 @@ ksmbd.mountd (user space daemon)
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
ksmbd.mountd is userspace process to, transfer user account and password that
|
ksmbd.mountd is userspace process to, transfer user account and password that
|
||||||
are registered using ksmbd.adduser(part of utils for user space). Further it
|
are registered using ksmbd.adduser (part of utils for user space). Further it
|
||||||
allows sharing information parameters that parsed from smb.conf to ksmbd in
|
allows sharing information parameters that parsed from smb.conf to ksmbd in
|
||||||
kernel. For the execution part it has a daemon which is continuously running
|
kernel. For the execution part it has a daemon which is continuously running
|
||||||
and connected to the kernel interface using netlink socket, it waits for the
|
and connected to the kernel interface using netlink socket, it waits for the
|
||||||
requests(dcerpc and share/user info). It handles RPC calls (at a minimum few
|
requests (dcerpc and share/user info). It handles RPC calls (at a minimum few
|
||||||
dozen) that are most important for file server from NetShareEnum and
|
dozen) that are most important for file server from NetShareEnum and
|
||||||
NetServerGetInfo. Complete DCE/RPC response is prepared from the user space
|
NetServerGetInfo. Complete DCE/RPC response is prepared from the user space
|
||||||
and passed over to the associated kernel thread for the client.
|
and passed over to the associated kernel thread for the client.
|
||||||
|
@ -154,11 +154,11 @@ Each layer
|
||||||
1. Enable all component prints
|
1. Enable all component prints
|
||||||
# sudo ksmbd.control -d "all"
|
# sudo ksmbd.control -d "all"
|
||||||
|
|
||||||
2. Enable one of components(smb, auth, vfs, oplock, ipc, conn, rdma)
|
2. Enable one of components (smb, auth, vfs, oplock, ipc, conn, rdma)
|
||||||
# sudo ksmbd.control -d "smb"
|
# sudo ksmbd.control -d "smb"
|
||||||
|
|
||||||
3. Show what prints are enable.
|
3. Show what prints are enabled.
|
||||||
# cat/sys/class/ksmbd-control/debug
|
# cat /sys/class/ksmbd-control/debug
|
||||||
[smb] auth vfs oplock ipc conn [rdma]
|
[smb] auth vfs oplock ipc conn [rdma]
|
||||||
|
|
||||||
4. Disable prints:
|
4. Disable prints:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.. SPDX-License-Identifier: GPL-2.0
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
=================================
|
=================================
|
||||||
NETWORK FILESYSTEM HELPER LIBRARY
|
Network Filesystem Helper Library
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. Contents:
|
.. Contents:
|
||||||
|
@ -37,22 +37,22 @@ into a common call framework.
|
||||||
|
|
||||||
The following services are provided:
|
The following services are provided:
|
||||||
|
|
||||||
* Handles transparent huge pages (THPs).
|
* Handle folios that span multiple pages.
|
||||||
|
|
||||||
* Insulates the netfs from VM interface changes.
|
* Insulate the netfs from VM interface changes.
|
||||||
|
|
||||||
* Allows the netfs to arbitrarily split reads up into pieces, even ones that
|
* Allow the netfs to arbitrarily split reads up into pieces, even ones that
|
||||||
don't match page sizes or page alignments and that may cross pages.
|
don't match folio sizes or folio alignments and that may cross folios.
|
||||||
|
|
||||||
* Allows the netfs to expand a readahead request in both directions to meet
|
* Allow the netfs to expand a readahead request in both directions to meet its
|
||||||
its needs.
|
needs.
|
||||||
|
|
||||||
* Allows the netfs to partially fulfil a read, which will then be resubmitted.
|
* Allow the netfs to partially fulfil a read, which will then be resubmitted.
|
||||||
|
|
||||||
* Handles local caching, allowing cached data and server-read data to be
|
* Handle local caching, allowing cached data and server-read data to be
|
||||||
interleaved for a single request.
|
interleaved for a single request.
|
||||||
|
|
||||||
* Handles clearing of bufferage that aren't on the server.
|
* Handle clearing of bufferage that aren't on the server.
|
||||||
|
|
||||||
* Handle retrying of reads that failed, switching reads from the cache to the
|
* Handle retrying of reads that failed, switching reads from the cache to the
|
||||||
server as necessary.
|
server as necessary.
|
||||||
|
@ -70,22 +70,22 @@ Read Helper Functions
|
||||||
|
|
||||||
Three read helpers are provided::
|
Three read helpers are provided::
|
||||||
|
|
||||||
* void netfs_readahead(struct readahead_control *ractl,
|
void netfs_readahead(struct readahead_control *ractl,
|
||||||
const struct netfs_read_request_ops *ops,
|
const struct netfs_read_request_ops *ops,
|
||||||
void *netfs_priv);``
|
void *netfs_priv);
|
||||||
* int netfs_readpage(struct file *file,
|
int netfs_readpage(struct file *file,
|
||||||
struct page *page,
|
struct folio *folio,
|
||||||
const struct netfs_read_request_ops *ops,
|
const struct netfs_read_request_ops *ops,
|
||||||
void *netfs_priv);
|
void *netfs_priv);
|
||||||
* int netfs_write_begin(struct file *file,
|
int netfs_write_begin(struct file *file,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
loff_t pos,
|
loff_t pos,
|
||||||
unsigned int len,
|
unsigned int len,
|
||||||
unsigned int flags,
|
unsigned int flags,
|
||||||
struct page **_page,
|
struct folio **_folio,
|
||||||
void **_fsdata,
|
void **_fsdata,
|
||||||
const struct netfs_read_request_ops *ops,
|
const struct netfs_read_request_ops *ops,
|
||||||
void *netfs_priv);
|
void *netfs_priv);
|
||||||
|
|
||||||
Each corresponds to a VM operation, with the addition of a couple of parameters
|
Each corresponds to a VM operation, with the addition of a couple of parameters
|
||||||
for the use of the read helpers:
|
for the use of the read helpers:
|
||||||
|
@ -103,8 +103,8 @@ Both of these values will be stored into the read request structure.
|
||||||
For ->readahead() and ->readpage(), the network filesystem should just jump
|
For ->readahead() and ->readpage(), the network filesystem should just jump
|
||||||
into the corresponding read helper; whereas for ->write_begin(), it may be a
|
into the corresponding read helper; whereas for ->write_begin(), it may be a
|
||||||
little more complicated as the network filesystem might want to flush
|
little more complicated as the network filesystem might want to flush
|
||||||
conflicting writes or track dirty data and needs to put the acquired page if an
|
conflicting writes or track dirty data and needs to put the acquired folio if
|
||||||
error occurs after calling the helper.
|
an error occurs after calling the helper.
|
||||||
|
|
||||||
The helpers manage the read request, calling back into the network filesystem
|
The helpers manage the read request, calling back into the network filesystem
|
||||||
through the suppplied table of operations. Waits will be performed as
|
through the suppplied table of operations. Waits will be performed as
|
||||||
|
@ -253,7 +253,7 @@ through which it can issue requests and negotiate::
|
||||||
void (*issue_op)(struct netfs_read_subrequest *subreq);
|
void (*issue_op)(struct netfs_read_subrequest *subreq);
|
||||||
bool (*is_still_valid)(struct netfs_read_request *rreq);
|
bool (*is_still_valid)(struct netfs_read_request *rreq);
|
||||||
int (*check_write_begin)(struct file *file, loff_t pos, unsigned len,
|
int (*check_write_begin)(struct file *file, loff_t pos, unsigned len,
|
||||||
struct page *page, void **_fsdata);
|
struct folio *folio, void **_fsdata);
|
||||||
void (*done)(struct netfs_read_request *rreq);
|
void (*done)(struct netfs_read_request *rreq);
|
||||||
void (*cleanup)(struct address_space *mapping, void *netfs_priv);
|
void (*cleanup)(struct address_space *mapping, void *netfs_priv);
|
||||||
};
|
};
|
||||||
|
@ -313,13 +313,14 @@ The operations are as follows:
|
||||||
|
|
||||||
There is no return value; the netfs_subreq_terminated() function should be
|
There is no return value; the netfs_subreq_terminated() function should be
|
||||||
called to indicate whether or not the operation succeeded and how much data
|
called to indicate whether or not the operation succeeded and how much data
|
||||||
it transferred. The filesystem also should not deal with setting pages
|
it transferred. The filesystem also should not deal with setting folios
|
||||||
uptodate, unlocking them or dropping their refs - the helpers need to deal
|
uptodate, unlocking them or dropping their refs - the helpers need to deal
|
||||||
with this as they have to coordinate with copying to the local cache.
|
with this as they have to coordinate with copying to the local cache.
|
||||||
|
|
||||||
Note that the helpers have the pages locked, but not pinned. It is possible
|
Note that the helpers have the folios locked, but not pinned. It is
|
||||||
to use the ITER_XARRAY iov iterator to refer to the range of the inode that
|
possible to use the ITER_XARRAY iov iterator to refer to the range of the
|
||||||
is being operated upon without the need to allocate large bvec tables.
|
inode that is being operated upon without the need to allocate large bvec
|
||||||
|
tables.
|
||||||
|
|
||||||
* ``is_still_valid()``
|
* ``is_still_valid()``
|
||||||
|
|
||||||
|
@ -330,15 +331,15 @@ The operations are as follows:
|
||||||
* ``check_write_begin()``
|
* ``check_write_begin()``
|
||||||
|
|
||||||
[Optional] This is called from the netfs_write_begin() helper once it has
|
[Optional] This is called from the netfs_write_begin() helper once it has
|
||||||
allocated/grabbed the page to be modified to allow the filesystem to flush
|
allocated/grabbed the folio to be modified to allow the filesystem to flush
|
||||||
conflicting state before allowing it to be modified.
|
conflicting state before allowing it to be modified.
|
||||||
|
|
||||||
It should return 0 if everything is now fine, -EAGAIN if the page should be
|
It should return 0 if everything is now fine, -EAGAIN if the folio should be
|
||||||
regrabbed and any other error code to abort the operation.
|
regrabbed and any other error code to abort the operation.
|
||||||
|
|
||||||
* ``done``
|
* ``done``
|
||||||
|
|
||||||
[Optional] This is called after the pages in the request have all been
|
[Optional] This is called after the folios in the request have all been
|
||||||
unlocked (and marked uptodate if applicable).
|
unlocked (and marked uptodate if applicable).
|
||||||
|
|
||||||
* ``cleanup``
|
* ``cleanup``
|
||||||
|
@ -390,7 +391,7 @@ The read helpers work by the following general procedure:
|
||||||
* If NETFS_SREQ_CLEAR_TAIL was set, a short read will be cleared to the
|
* If NETFS_SREQ_CLEAR_TAIL was set, a short read will be cleared to the
|
||||||
end of the slice instead of reissuing.
|
end of the slice instead of reissuing.
|
||||||
|
|
||||||
* Once the data is read, the pages that have been fully read/cleared:
|
* Once the data is read, the folios that have been fully read/cleared:
|
||||||
|
|
||||||
* Will be marked uptodate.
|
* Will be marked uptodate.
|
||||||
|
|
||||||
|
@ -398,11 +399,11 @@ The read helpers work by the following general procedure:
|
||||||
|
|
||||||
* Unlocked
|
* Unlocked
|
||||||
|
|
||||||
* Any pages that need writing to the cache will then have DIO writes issued.
|
* Any folios that need writing to the cache will then have DIO writes issued.
|
||||||
|
|
||||||
* Synchronous operations will wait for reading to be complete.
|
* Synchronous operations will wait for reading to be complete.
|
||||||
|
|
||||||
* Writes to the cache will proceed asynchronously and the pages will have the
|
* Writes to the cache will proceed asynchronously and the folios will have the
|
||||||
PG_fscache mark removed when that completes.
|
PG_fscache mark removed when that completes.
|
||||||
|
|
||||||
* The request structures will be cleaned up when everything has completed.
|
* The request structures will be cleaned up when everything has completed.
|
||||||
|
@ -452,6 +453,9 @@ operation table looks like the following::
|
||||||
netfs_io_terminated_t term_func,
|
netfs_io_terminated_t term_func,
|
||||||
void *term_func_priv);
|
void *term_func_priv);
|
||||||
|
|
||||||
|
int (*prepare_write)(struct netfs_cache_resources *cres,
|
||||||
|
loff_t *_start, size_t *_len, loff_t i_size);
|
||||||
|
|
||||||
int (*write)(struct netfs_cache_resources *cres,
|
int (*write)(struct netfs_cache_resources *cres,
|
||||||
loff_t start_pos,
|
loff_t start_pos,
|
||||||
struct iov_iter *iter,
|
struct iov_iter *iter,
|
||||||
|
@ -509,6 +513,14 @@ The methods defined in the table are:
|
||||||
indicating whether the termination is definitely happening in the caller's
|
indicating whether the termination is definitely happening in the caller's
|
||||||
context.
|
context.
|
||||||
|
|
||||||
|
* ``prepare_write()``
|
||||||
|
|
||||||
|
[Required] Called to adjust a write to the cache and check that there is
|
||||||
|
sufficient space in the cache. The start and length values indicate the
|
||||||
|
size of the write that netfslib is proposing, and this can be adjusted by
|
||||||
|
the cache to respect DIO boundaries. The file size is passed for
|
||||||
|
information.
|
||||||
|
|
||||||
* ``write()``
|
* ``write()``
|
||||||
|
|
||||||
[Required] Called to write to the cache. The start file offset is given
|
[Required] Called to write to the cache. The start file offset is given
|
||||||
|
@ -525,4 +537,9 @@ not the read request structure as they could be used in other situations where
|
||||||
there isn't a read request structure as well, such as writing dirty data to the
|
there isn't a read request structure as well, such as writing dirty data to the
|
||||||
cache.
|
cache.
|
||||||
|
|
||||||
|
|
||||||
|
API Function Reference
|
||||||
|
======================
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/netfs.h
|
.. kernel-doc:: include/linux/netfs.h
|
||||||
|
.. kernel-doc:: fs/netfs/read_helper.c
|
||||||
|
|
|
@ -36,6 +36,8 @@ Key to symbols
|
||||||
|
|
||||||
=============== =============================================================
|
=============== =============================================================
|
||||||
S Start condition
|
S Start condition
|
||||||
|
Sr Repeated start condition, used to switch from write to
|
||||||
|
read mode.
|
||||||
P Stop condition
|
P Stop condition
|
||||||
Rd/Wr (1 bit) Read/Write bit. Rd equals 1, Wr equals 0.
|
Rd/Wr (1 bit) Read/Write bit. Rd equals 1, Wr equals 0.
|
||||||
A, NA (1 bit) Acknowledge (ACK) and Not Acknowledge (NACK) bit
|
A, NA (1 bit) Acknowledge (ACK) and Not Acknowledge (NACK) bit
|
||||||
|
@ -100,7 +102,7 @@ Implemented by i2c_smbus_read_byte_data()
|
||||||
This reads a single byte from a device, from a designated register.
|
This reads a single byte from a device, from a designated register.
|
||||||
The register is specified through the Comm byte::
|
The register is specified through the Comm byte::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P
|
S Addr Wr [A] Comm [A] Sr Addr Rd [A] [Data] NA P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA
|
Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA
|
||||||
|
|
||||||
|
@ -114,7 +116,7 @@ This operation is very like Read Byte; again, data is read from a
|
||||||
device, from a designated register that is specified through the Comm
|
device, from a designated register that is specified through the Comm
|
||||||
byte. But this time, the data is a complete word (16 bits)::
|
byte. But this time, the data is a complete word (16 bits)::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P
|
S Addr Wr [A] Comm [A] Sr Addr Rd [A] [DataLow] A [DataHigh] NA P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_READ_WORD_DATA
|
Functionality flag: I2C_FUNC_SMBUS_READ_WORD_DATA
|
||||||
|
|
||||||
|
@ -164,7 +166,7 @@ This command selects a device register (through the Comm byte), sends
|
||||||
16 bits of data to it, and reads 16 bits of data in return::
|
16 bits of data to it, and reads 16 bits of data in return::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A]
|
S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A]
|
||||||
S Addr Rd [A] [DataLow] A [DataHigh] NA P
|
Sr Addr Rd [A] [DataLow] A [DataHigh] NA P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_PROC_CALL
|
Functionality flag: I2C_FUNC_SMBUS_PROC_CALL
|
||||||
|
|
||||||
|
@ -181,7 +183,7 @@ of data is specified by the device in the Count byte.
|
||||||
::
|
::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A]
|
S Addr Wr [A] Comm [A]
|
||||||
S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P
|
Sr Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_READ_BLOCK_DATA
|
Functionality flag: I2C_FUNC_SMBUS_READ_BLOCK_DATA
|
||||||
|
|
||||||
|
@ -212,7 +214,7 @@ This command selects a device register (through the Comm byte), sends
|
||||||
1 to 31 bytes of data to it, and reads 1 to 31 bytes of data in return::
|
1 to 31 bytes of data to it, and reads 1 to 31 bytes of data in return::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] Count [A] Data [A] ...
|
S Addr Wr [A] Comm [A] Count [A] Data [A] ...
|
||||||
S Addr Rd [A] [Count] A [Data] ... A P
|
Sr Addr Rd [A] [Count] A [Data] ... A P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_BLOCK_PROC_CALL
|
Functionality flag: I2C_FUNC_SMBUS_BLOCK_PROC_CALL
|
||||||
|
|
||||||
|
@ -300,7 +302,7 @@ This command reads a block of bytes from a device, from a
|
||||||
designated register that is specified through the Comm byte::
|
designated register that is specified through the Comm byte::
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A]
|
S Addr Wr [A] Comm [A]
|
||||||
S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
|
Sr Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
|
||||||
|
|
||||||
Functionality flag: I2C_FUNC_SMBUS_READ_I2C_BLOCK
|
Functionality flag: I2C_FUNC_SMBUS_READ_I2C_BLOCK
|
||||||
|
|
||||||
|
|
|
@ -439,11 +439,9 @@ preemption. The following substitution works on both kernels::
|
||||||
spin_lock(&p->lock);
|
spin_lock(&p->lock);
|
||||||
p->count += this_cpu_read(var2);
|
p->count += this_cpu_read(var2);
|
||||||
|
|
||||||
On a non-PREEMPT_RT kernel migrate_disable() maps to preempt_disable()
|
|
||||||
which makes the above code fully equivalent. On a PREEMPT_RT kernel
|
|
||||||
migrate_disable() ensures that the task is pinned on the current CPU which
|
migrate_disable() ensures that the task is pinned on the current CPU which
|
||||||
in turn guarantees that the per-CPU access to var1 and var2 are staying on
|
in turn guarantees that the per-CPU access to var1 and var2 are staying on
|
||||||
the same CPU.
|
the same CPU while the task remains preemptible.
|
||||||
|
|
||||||
The migrate_disable() substitution is not valid for the following
|
The migrate_disable() substitution is not valid for the following
|
||||||
scenario::
|
scenario::
|
||||||
|
@ -456,9 +454,8 @@ scenario::
|
||||||
p = this_cpu_ptr(&var1);
|
p = this_cpu_ptr(&var1);
|
||||||
p->val = func2();
|
p->val = func2();
|
||||||
|
|
||||||
While correct on a non-PREEMPT_RT kernel, this breaks on PREEMPT_RT because
|
This breaks because migrate_disable() does not protect against reentrancy from
|
||||||
here migrate_disable() does not protect against reentrancy from a
|
a preempting task. A correct substitution for this case is::
|
||||||
preempting task. A correct substitution for this case is::
|
|
||||||
|
|
||||||
func()
|
func()
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,8 +37,7 @@ conn_reuse_mode - INTEGER
|
||||||
|
|
||||||
0: disable any special handling on port reuse. The new
|
0: disable any special handling on port reuse. The new
|
||||||
connection will be delivered to the same real server that was
|
connection will be delivered to the same real server that was
|
||||||
servicing the previous connection. This will effectively
|
servicing the previous connection.
|
||||||
disable expire_nodest_conn.
|
|
||||||
|
|
||||||
bit 1: enable rescheduling of new connections when it is safe.
|
bit 1: enable rescheduling of new connections when it is safe.
|
||||||
That is, whenever expire_nodest_conn and for TCP sockets, when
|
That is, whenever expire_nodest_conn and for TCP sockets, when
|
||||||
|
|
|
@ -486,8 +486,8 @@ of packets.
|
||||||
Drivers are free to use a more permissive configuration than the requested
|
Drivers are free to use a more permissive configuration than the requested
|
||||||
configuration. It is expected that drivers should only implement directly the
|
configuration. It is expected that drivers should only implement directly the
|
||||||
most generic mode that can be supported. For example if the hardware can
|
most generic mode that can be supported. For example if the hardware can
|
||||||
support HWTSTAMP_FILTER_V2_EVENT, then it should generally always upscale
|
support HWTSTAMP_FILTER_PTP_V2_EVENT, then it should generally always upscale
|
||||||
HWTSTAMP_FILTER_V2_L2_SYNC_MESSAGE, and so forth, as HWTSTAMP_FILTER_V2_EVENT
|
HWTSTAMP_FILTER_PTP_V2_L2_SYNC, and so forth, as HWTSTAMP_FILTER_PTP_V2_EVENT
|
||||||
is more generic (and more useful to applications).
|
is more generic (and more useful to applications).
|
||||||
|
|
||||||
A driver which supports hardware time stamping shall update the struct
|
A driver which supports hardware time stamping shall update the struct
|
||||||
|
|
|
@ -84,6 +84,16 @@ CONFIG_ENERGY_MODEL must be enabled to use the EM framework.
|
||||||
2.2 Registration of performance domains
|
2.2 Registration of performance domains
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Registration of 'advanced' EM
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The 'advanced' EM gets it's name due to the fact that the driver is allowed
|
||||||
|
to provide more precised power model. It's not limited to some implemented math
|
||||||
|
formula in the framework (like it's in 'simple' EM case). It can better reflect
|
||||||
|
the real power measurements performed for each performance state. Thus, this
|
||||||
|
registration method should be preferred in case considering EM static power
|
||||||
|
(leakage) is important.
|
||||||
|
|
||||||
Drivers are expected to register performance domains into the EM framework by
|
Drivers are expected to register performance domains into the EM framework by
|
||||||
calling the following API::
|
calling the following API::
|
||||||
|
|
||||||
|
@ -103,6 +113,18 @@ to: return warning/error, stop working or panic.
|
||||||
See Section 3. for an example of driver implementing this
|
See Section 3. for an example of driver implementing this
|
||||||
callback, or Section 2.4 for further documentation on this API
|
callback, or Section 2.4 for further documentation on this API
|
||||||
|
|
||||||
|
Registration of 'simple' EM
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The 'simple' EM is registered using the framework helper function
|
||||||
|
cpufreq_register_em_with_opp(). It implements a power model which is tight to
|
||||||
|
math formula::
|
||||||
|
|
||||||
|
Power = C * V^2 * f
|
||||||
|
|
||||||
|
The EM which is registered using this method might not reflect correctly the
|
||||||
|
physics of a real device, e.g. when static power (leakage) is important.
|
||||||
|
|
||||||
|
|
||||||
2.3 Accessing performance domains
|
2.3 Accessing performance domains
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -138,6 +160,10 @@ or in Section 2.4
|
||||||
3. Example driver
|
3. Example driver
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
The CPUFreq framework supports dedicated callback for registering
|
||||||
|
the EM for a given CPU(s) 'policy' object: cpufreq_driver::register_em().
|
||||||
|
That callback has to be implemented properly for a given driver,
|
||||||
|
because the framework would call it at the right time during setup.
|
||||||
This section provides a simple example of a CPUFreq driver registering a
|
This section provides a simple example of a CPUFreq driver registering a
|
||||||
performance domain in the Energy Model framework using the (fake) 'foo'
|
performance domain in the Energy Model framework using the (fake) 'foo'
|
||||||
protocol. The driver implements an est_power() function to be provided to the
|
protocol. The driver implements an est_power() function to be provided to the
|
||||||
|
@ -167,25 +193,22 @@ EM framework::
|
||||||
20 return 0;
|
20 return 0;
|
||||||
21 }
|
21 }
|
||||||
22
|
22
|
||||||
23 static int foo_cpufreq_init(struct cpufreq_policy *policy)
|
23 static void foo_cpufreq_register_em(struct cpufreq_policy *policy)
|
||||||
24 {
|
24 {
|
||||||
25 struct em_data_callback em_cb = EM_DATA_CB(est_power);
|
25 struct em_data_callback em_cb = EM_DATA_CB(est_power);
|
||||||
26 struct device *cpu_dev;
|
26 struct device *cpu_dev;
|
||||||
27 int nr_opp, ret;
|
27 int nr_opp;
|
||||||
28
|
28
|
||||||
29 cpu_dev = get_cpu_device(cpumask_first(policy->cpus));
|
29 cpu_dev = get_cpu_device(cpumask_first(policy->cpus));
|
||||||
30
|
30
|
||||||
31 /* Do the actual CPUFreq init work ... */
|
31 /* Find the number of OPPs for this policy */
|
||||||
32 ret = do_foo_cpufreq_init(policy);
|
32 nr_opp = foo_get_nr_opp(policy);
|
||||||
33 if (ret)
|
33
|
||||||
34 return ret;
|
34 /* And register the new performance domain */
|
||||||
35
|
35 em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus,
|
||||||
36 /* Find the number of OPPs for this policy */
|
36 true);
|
||||||
37 nr_opp = foo_get_nr_opp(policy);
|
37 }
|
||||||
38
|
38
|
||||||
39 /* And register the new performance domain */
|
39 static struct cpufreq_driver foo_cpufreq_driver = {
|
||||||
40 em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus,
|
40 .register_em = foo_cpufreq_register_em,
|
||||||
41 true);
|
41 };
|
||||||
42
|
|
||||||
43 return 0;
|
|
||||||
44 }
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ GNU make 3.81 make --version
|
||||||
binutils 2.23 ld -v
|
binutils 2.23 ld -v
|
||||||
flex 2.5.35 flex --version
|
flex 2.5.35 flex --version
|
||||||
bison 2.0 bison --version
|
bison 2.0 bison --version
|
||||||
|
pahole 1.16 pahole --version
|
||||||
util-linux 2.10o fdformat --version
|
util-linux 2.10o fdformat --version
|
||||||
kmod 13 depmod -V
|
kmod 13 depmod -V
|
||||||
e2fsprogs 1.41.4 e2fsck -V
|
e2fsprogs 1.41.4 e2fsck -V
|
||||||
|
@ -54,7 +55,7 @@ mcelog 0.6 mcelog --version
|
||||||
iptables 1.4.2 iptables -V
|
iptables 1.4.2 iptables -V
|
||||||
openssl & libcrypto 1.0.0 openssl version
|
openssl & libcrypto 1.0.0 openssl version
|
||||||
bc 1.06.95 bc --version
|
bc 1.06.95 bc --version
|
||||||
Sphinx\ [#f1]_ 1.3 sphinx-build --version
|
Sphinx\ [#f1]_ 1.7 sphinx-build --version
|
||||||
====================== =============== ========================================
|
====================== =============== ========================================
|
||||||
|
|
||||||
.. [#f1] Sphinx is needed only to build the Kernel documentation
|
.. [#f1] Sphinx is needed only to build the Kernel documentation
|
||||||
|
@ -108,6 +109,16 @@ Bison
|
||||||
Since Linux 4.16, the build system generates parsers
|
Since Linux 4.16, the build system generates parsers
|
||||||
during build. This requires bison 2.0 or later.
|
during build. This requires bison 2.0 or later.
|
||||||
|
|
||||||
|
pahole:
|
||||||
|
-------
|
||||||
|
|
||||||
|
Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
|
||||||
|
generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
|
||||||
|
modules as well. This requires pahole v1.16 or later.
|
||||||
|
|
||||||
|
It is found in the 'dwarves' or 'pahole' distro packages or from
|
||||||
|
https://fedorapeople.org/~acme/dwarves/.
|
||||||
|
|
||||||
Perl
|
Perl
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,8 @@ works, see Documentation/process/development-process.rst. Also, read
|
||||||
Documentation/process/submit-checklist.rst
|
Documentation/process/submit-checklist.rst
|
||||||
for a list of items to check before submitting code. If you are submitting
|
for a list of items to check before submitting code. If you are submitting
|
||||||
a driver, also read Documentation/process/submitting-drivers.rst; for device
|
a driver, also read Documentation/process/submitting-drivers.rst; for device
|
||||||
tree binding patches, read Documentation/process/submitting-patches.rst.
|
tree binding patches, read
|
||||||
|
Documentation/devicetree/bindings/submitting-patches.rst.
|
||||||
|
|
||||||
This documentation assumes that you're using ``git`` to prepare your patches.
|
This documentation assumes that you're using ``git`` to prepare your patches.
|
||||||
If you're unfamiliar with ``git``, you would be well-advised to learn how to
|
If you're unfamiliar with ``git``, you would be well-advised to learn how to
|
||||||
|
@ -22,8 +23,8 @@ use it, it will make your life as a kernel developer and in general much
|
||||||
easier.
|
easier.
|
||||||
|
|
||||||
Some subsystems and maintainer trees have additional information about
|
Some subsystems and maintainer trees have additional information about
|
||||||
their workflow and expectations, see :ref:`Documentation/process/maintainer
|
their workflow and expectations, see
|
||||||
handbooks <maintainer_handbooks_main>`.
|
:ref:`Documentation/process/maintainer-handbooks.rst <maintainer_handbooks_main>`.
|
||||||
|
|
||||||
Obtain a current source tree
|
Obtain a current source tree
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
|
@ -2442,11 +2442,10 @@ Or this simple script!
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
tracefs=`sed -ne 's/^tracefs \(.*\) tracefs.*/\1/p' /proc/mounts`
|
tracefs=`sed -ne 's/^tracefs \(.*\) tracefs.*/\1/p' /proc/mounts`
|
||||||
echo nop > $tracefs/tracing/current_tracer
|
echo 0 > $tracefs/tracing_on
|
||||||
echo 0 > $tracefs/tracing/tracing_on
|
echo $$ > $tracefs/set_ftrace_pid
|
||||||
echo $$ > $tracefs/tracing/set_ftrace_pid
|
echo function > $tracefs/current_tracer
|
||||||
echo function > $tracefs/tracing/current_tracer
|
echo 1 > $tracefs/tracing_on
|
||||||
echo 1 > $tracefs/tracing/tracing_on
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ Installazione Sphinx
|
||||||
====================
|
====================
|
||||||
|
|
||||||
I marcatori ReST utilizzati nei file in Documentation/ sono pensati per essere
|
I marcatori ReST utilizzati nei file in Documentation/ sono pensati per essere
|
||||||
processati da ``Sphinx`` nella versione 1.3 o superiore.
|
processati da ``Sphinx`` nella versione 1.7 o superiore.
|
||||||
|
|
||||||
Esiste uno script che verifica i requisiti Sphinx. Per ulteriori dettagli
|
Esiste uno script che verifica i requisiti Sphinx. Per ulteriori dettagli
|
||||||
consultate :ref:`it_sphinx-pre-install`.
|
consultate :ref:`it_sphinx-pre-install`.
|
||||||
|
@ -53,11 +53,6 @@ pacchettizzato dalla vostra distribuzione.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
#) Le versioni di Sphinx inferiori alla 1.5 non funzionano bene
|
|
||||||
con il pacchetto Python docutils versione 0.13.1 o superiore.
|
|
||||||
Se volete usare queste versioni, allora dovere eseguire
|
|
||||||
``pip install 'docutils==0.12'``.
|
|
||||||
|
|
||||||
#) Viene raccomandato l'uso del tema RTD per la documentazione in HTML.
|
#) Viene raccomandato l'uso del tema RTD per la documentazione in HTML.
|
||||||
A seconda della versione di Sphinx, potrebbe essere necessaria
|
A seconda della versione di Sphinx, potrebbe essere necessaria
|
||||||
l'installazione tramite il comando ``pip install sphinx_rtd_theme``.
|
l'installazione tramite il comando ``pip install sphinx_rtd_theme``.
|
||||||
|
@ -67,13 +62,13 @@ pacchettizzato dalla vostra distribuzione.
|
||||||
utilizzando LaTeX. Per una corretta interpretazione, è necessario aver
|
utilizzando LaTeX. Per una corretta interpretazione, è necessario aver
|
||||||
installato texlive con i pacchetti amdfonts e amsmath.
|
installato texlive con i pacchetti amdfonts e amsmath.
|
||||||
|
|
||||||
Riassumendo, se volete installare la versione 1.7.9 di Sphinx dovete eseguire::
|
Riassumendo, se volete installare la versione 2.4.4 di Sphinx dovete eseguire::
|
||||||
|
|
||||||
$ virtualenv sphinx_1.7.9
|
$ virtualenv sphinx_2.4.4
|
||||||
$ . sphinx_1.7.9/bin/activate
|
$ . sphinx_2.4.4/bin/activate
|
||||||
(sphinx_1.7.9) $ pip install -r Documentation/sphinx/requirements.txt
|
(sphinx_2.4.4) $ pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
Dopo aver eseguito ``. sphinx_1.7.9/bin/activate``, il prompt cambierà per
|
Dopo aver eseguito ``. sphinx_2.4.4/bin/activate``, il prompt cambierà per
|
||||||
indicare che state usando il nuovo ambiente. Se aprite un nuova sessione,
|
indicare che state usando il nuovo ambiente. Se aprite un nuova sessione,
|
||||||
prima di generare la documentazione, dovrete rieseguire questo comando per
|
prima di generare la documentazione, dovrete rieseguire questo comando per
|
||||||
rientrare nell'ambiente virtuale.
|
rientrare nell'ambiente virtuale.
|
||||||
|
@ -94,7 +89,7 @@ Generazione in PDF e LaTeX
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
Al momento, la generazione di questi documenti è supportata solo dalle
|
Al momento, la generazione di questi documenti è supportata solo dalle
|
||||||
versioni di Sphinx superiori alla 1.4.
|
versioni di Sphinx superiori alla 2.4.
|
||||||
|
|
||||||
Per la generazione di PDF e LaTeX, avrete bisogno anche del pacchetto
|
Per la generazione di PDF e LaTeX, avrete bisogno anche del pacchetto
|
||||||
``XeLaTeX`` nella versione 3.14159265
|
``XeLaTeX`` nella versione 3.14159265
|
||||||
|
@ -119,8 +114,8 @@ l'installazione::
|
||||||
You should run:
|
You should run:
|
||||||
|
|
||||||
sudo dnf install -y texlive-luatex85
|
sudo dnf install -y texlive-luatex85
|
||||||
/usr/bin/virtualenv sphinx_1.7.9
|
/usr/bin/virtualenv sphinx_2.4.4
|
||||||
. sphinx_1.7.9/bin/activate
|
. sphinx_2.4.4/bin/activate
|
||||||
pip install -r Documentation/sphinx/requirements.txt
|
pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
||||||
|
|
|
@ -57,7 +57,7 @@ mcelog 0.6 mcelog --version
|
||||||
iptables 1.4.2 iptables -V
|
iptables 1.4.2 iptables -V
|
||||||
openssl & libcrypto 1.0.0 openssl version
|
openssl & libcrypto 1.0.0 openssl version
|
||||||
bc 1.06.95 bc --version
|
bc 1.06.95 bc --version
|
||||||
Sphinx\ [#f1]_ 1.3 sphinx-build --version
|
Sphinx\ [#f1]_ 1.7 sphinx-build --version
|
||||||
====================== ================= ========================================
|
====================== ================= ========================================
|
||||||
|
|
||||||
.. [#f1] Sphinx è necessario solo per produrre la documentazione del Kernel
|
.. [#f1] Sphinx è necessario solo per produrre la documentazione del Kernel
|
||||||
|
|
|
@ -26,7 +26,7 @@ reStructuredText文件可能包含包含来自源文件的结构化文档注释
|
||||||
安装Sphinx
|
安装Sphinx
|
||||||
==========
|
==========
|
||||||
|
|
||||||
Documentation/ 下的ReST文件现在使用sphinx1.3或更高版本构建。
|
Documentation/ 下的ReST文件现在使用sphinx1.7或更高版本构建。
|
||||||
|
|
||||||
这有一个脚本可以检查Sphinx的依赖项。更多详细信息见
|
这有一个脚本可以检查Sphinx的依赖项。更多详细信息见
|
||||||
:ref:`sphinx-pre-install_zh` 。
|
:ref:`sphinx-pre-install_zh` 。
|
||||||
|
@ -40,22 +40,19 @@ Documentation/ 下的ReST文件现在使用sphinx1.3或更高版本构建。
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
#) 低于1.5版本的Sphinx无法与Python的0.13.1或更高版本docutils一起正常工作。
|
|
||||||
如果您想使用这些版本,那么应该运行 ``pip install 'docutils==0.12'`` 。
|
|
||||||
|
|
||||||
#) html输出建议使用RTD主题。根据Sphinx版本的不同,它应该用
|
#) html输出建议使用RTD主题。根据Sphinx版本的不同,它应该用
|
||||||
``pip install sphinx_rtd_theme`` 单独安装。
|
``pip install sphinx_rtd_theme`` 单独安装。
|
||||||
|
|
||||||
#) 一些ReST页面包含数学表达式。由于Sphinx的工作方式,这些表达式是使用 LaTeX
|
#) 一些ReST页面包含数学表达式。由于Sphinx的工作方式,这些表达式是使用 LaTeX
|
||||||
编写的。它需要安装amsfonts和amsmath宏包,以便显示。
|
编写的。它需要安装amsfonts和amsmath宏包,以便显示。
|
||||||
|
|
||||||
总之,如您要安装Sphinx 1.7.9版本,应执行::
|
总之,如您要安装Sphinx 2.4.4版本,应执行::
|
||||||
|
|
||||||
$ virtualenv sphinx_1.7.9
|
$ virtualenv sphinx_2.4.4
|
||||||
$ . sphinx_1.7.9/bin/activate
|
$ . sphinx_2.4.4/bin/activate
|
||||||
(sphinx_1.7.9) $ pip install -r Documentation/sphinx/requirements.txt
|
(sphinx_2.4.4) $ pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
在运行 ``. sphinx_1.7.9/bin/activate`` 之后,提示符将变化,以指示您正在使用新
|
在运行 ``. sphinx_2.4.4/bin/activate`` 之后,提示符将变化,以指示您正在使用新
|
||||||
环境。如果您打开了一个新的shell,那么在构建文档之前,您需要重新运行此命令以再
|
环境。如果您打开了一个新的shell,那么在构建文档之前,您需要重新运行此命令以再
|
||||||
次进入虚拟环境中。
|
次进入虚拟环境中。
|
||||||
|
|
||||||
|
@ -71,7 +68,7 @@ Documentation/ 下的ReST文件现在使用sphinx1.3或更高版本构建。
|
||||||
PDF和LaTeX构建
|
PDF和LaTeX构建
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
目前只有Sphinx 1.4及更高版本才支持这种构建。
|
目前只有Sphinx 2.4及更高版本才支持这种构建。
|
||||||
|
|
||||||
对于PDF和LaTeX输出,还需要 ``XeLaTeX`` 3.14159265版本。(译注:此版本号真实
|
对于PDF和LaTeX输出,还需要 ``XeLaTeX`` 3.14159265版本。(译注:此版本号真实
|
||||||
存在)
|
存在)
|
||||||
|
@ -93,8 +90,8 @@ PDF和LaTeX构建
|
||||||
You should run:
|
You should run:
|
||||||
|
|
||||||
sudo dnf install -y texlive-luatex85
|
sudo dnf install -y texlive-luatex85
|
||||||
/usr/bin/virtualenv sphinx_1.7.9
|
/usr/bin/virtualenv sphinx_2.4.4
|
||||||
. sphinx_1.7.9/bin/activate
|
. sphinx_2.4.4/bin/activate
|
||||||
pip install -r Documentation/sphinx/requirements.txt
|
pip install -r Documentation/sphinx/requirements.txt
|
||||||
|
|
||||||
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
|
||||||
|
|
|
@ -36,14 +36,14 @@ Linux内核管理风格
|
||||||
每个人都认为管理者做决定,而且决策很重要。决定越大越痛苦,管理者就必须越高级。
|
每个人都认为管理者做决定,而且决策很重要。决定越大越痛苦,管理者就必须越高级。
|
||||||
这很明显,但事实并非如此。
|
这很明显,但事实并非如此。
|
||||||
|
|
||||||
游戏的名字是 **避免** 做出决定。尤其是,如果有人告诉你“选择(a)或(b),
|
最重要的是 **避免** 做出决定。尤其是,如果有人告诉你“选择(a)或(b),
|
||||||
我们真的需要你来做决定”,你就是陷入麻烦的管理者。你管理的人比你更了解细节,
|
我们真的需要你来做决定”,你就是陷入麻烦的管理者。你管理的人比你更了解细节,
|
||||||
所以如果他们来找你做技术决策,你完蛋了。你显然没有能力为他们做这个决定。
|
所以如果他们来找你做技术决策,你完蛋了。你显然没有能力为他们做这个决定。
|
||||||
|
|
||||||
(推论:如果你管理的人不比你更了解细节,你也会被搞砸,尽管原因完全不同。
|
(推论:如果你管理的人不比你更了解细节,你也会被搞砸,尽管原因完全不同。
|
||||||
也就是说,你的工作是错的,他们应该管理你的才智)
|
也就是说,你的工作是错的,他们应该管理你的才智)
|
||||||
|
|
||||||
所以游戏的名字是 **避免** 做出决定,至少是那些大而痛苦的决定。做一些小的
|
所以最重要的是 **避免** 做出决定,至少是那些大而痛苦的决定。做一些小的
|
||||||
和非结果性的决定是很好的,并且使您看起来好像知道自己在做什么,所以内核管理者
|
和非结果性的决定是很好的,并且使您看起来好像知道自己在做什么,所以内核管理者
|
||||||
需要做的是将那些大的和痛苦的决定变成那些没有人真正关心的小事情。
|
需要做的是将那些大的和痛苦的决定变成那些没有人真正关心的小事情。
|
||||||
|
|
||||||
|
|
59
MAINTAINERS
59
MAINTAINERS
|
@ -2263,6 +2263,15 @@ L: linux-iio@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/counter/microchip-tcb-capture.c
|
F: drivers/counter/microchip-tcb-capture.c
|
||||||
|
|
||||||
|
ARM/MILBEAUT ARCHITECTURE
|
||||||
|
M: Taichi Sugaya <sugaya.taichi@socionext.com>
|
||||||
|
M: Takao Orito <orito.takao@socionext.com>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/boot/dts/milbeaut*
|
||||||
|
F: arch/arm/mach-milbeaut/
|
||||||
|
N: milbeaut
|
||||||
|
|
||||||
ARM/MIOA701 MACHINE SUPPORT
|
ARM/MIOA701 MACHINE SUPPORT
|
||||||
M: Robert Jarzmik <robert.jarzmik@free.fr>
|
M: Robert Jarzmik <robert.jarzmik@free.fr>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
@ -2729,10 +2738,11 @@ S: Maintained
|
||||||
F: drivers/memory/*emif*
|
F: drivers/memory/*emif*
|
||||||
|
|
||||||
ARM/TEXAS INSTRUMENT KEYSTONE ARCHITECTURE
|
ARM/TEXAS INSTRUMENT KEYSTONE ARCHITECTURE
|
||||||
|
M: Nishanth Menon <nm@ti.com>
|
||||||
M: Santosh Shilimkar <ssantosh@kernel.org>
|
M: Santosh Shilimkar <ssantosh@kernel.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
|
||||||
F: arch/arm/boot/dts/keystone-*
|
F: arch/arm/boot/dts/keystone-*
|
||||||
F: arch/arm/mach-keystone/
|
F: arch/arm/mach-keystone/
|
||||||
|
|
||||||
|
@ -3570,13 +3580,14 @@ L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/broadcom/b44.*
|
F: drivers/net/ethernet/broadcom/b44.*
|
||||||
|
|
||||||
BROADCOM B53 ETHERNET SWITCH DRIVER
|
BROADCOM B53/SF2 ETHERNET SWITCH DRIVER
|
||||||
M: Florian Fainelli <f.fainelli@gmail.com>
|
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: openwrt-devel@lists.openwrt.org (subscribers-only)
|
L: openwrt-devel@lists.openwrt.org (subscribers-only)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
|
F: Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
|
||||||
F: drivers/net/dsa/b53/*
|
F: drivers/net/dsa/b53/*
|
||||||
|
F: drivers/net/dsa/bcm_sf2*
|
||||||
F: include/linux/dsa/brcm.h
|
F: include/linux/dsa/brcm.h
|
||||||
F: include/linux/platform_data/b53.h
|
F: include/linux/platform_data/b53.h
|
||||||
|
|
||||||
|
@ -3733,7 +3744,7 @@ F: drivers/scsi/bnx2i/
|
||||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||||
M: Ariel Elior <aelior@marvell.com>
|
M: Ariel Elior <aelior@marvell.com>
|
||||||
M: Sudarsana Kalluru <skalluru@marvell.com>
|
M: Sudarsana Kalluru <skalluru@marvell.com>
|
||||||
M: GR-everest-linux-l2@marvell.com
|
M: Manish Chopra <manishc@marvell.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/broadcom/bnx2x/
|
F: drivers/net/ethernet/broadcom/bnx2x/
|
||||||
|
@ -9318,7 +9329,6 @@ S: Maintained
|
||||||
F: drivers/iio/pressure/dps310.c
|
F: drivers/iio/pressure/dps310.c
|
||||||
|
|
||||||
INFINIBAND SUBSYSTEM
|
INFINIBAND SUBSYSTEM
|
||||||
M: Doug Ledford <dledford@redhat.com>
|
|
||||||
M: Jason Gunthorpe <jgg@nvidia.com>
|
M: Jason Gunthorpe <jgg@nvidia.com>
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -10269,9 +10279,9 @@ F: lib/Kconfig.kcsan
|
||||||
F: scripts/Makefile.kcsan
|
F: scripts/Makefile.kcsan
|
||||||
|
|
||||||
KDUMP
|
KDUMP
|
||||||
M: Dave Young <dyoung@redhat.com>
|
|
||||||
M: Baoquan He <bhe@redhat.com>
|
M: Baoquan He <bhe@redhat.com>
|
||||||
R: Vivek Goyal <vgoyal@redhat.com>
|
R: Vivek Goyal <vgoyal@redhat.com>
|
||||||
|
R: Dave Young <dyoung@redhat.com>
|
||||||
L: kexec@lists.infradead.org
|
L: kexec@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: http://lse.sourceforge.net/kdump/
|
W: http://lse.sourceforge.net/kdump/
|
||||||
|
@ -10445,7 +10455,7 @@ F: arch/riscv/include/uapi/asm/kvm*
|
||||||
F: arch/riscv/kvm/
|
F: arch/riscv/kvm/
|
||||||
|
|
||||||
KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
|
KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
|
||||||
M: Christian Borntraeger <borntraeger@de.ibm.com>
|
M: Christian Borntraeger <borntraeger@linux.ibm.com>
|
||||||
M: Janosch Frank <frankja@linux.ibm.com>
|
M: Janosch Frank <frankja@linux.ibm.com>
|
||||||
R: David Hildenbrand <david@redhat.com>
|
R: David Hildenbrand <david@redhat.com>
|
||||||
R: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
R: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
||||||
|
@ -12169,8 +12179,8 @@ F: drivers/net/ethernet/mellanox/mlx5/core/fpga/*
|
||||||
F: include/linux/mlx5/mlx5_ifc_fpga.h
|
F: include/linux/mlx5/mlx5_ifc_fpga.h
|
||||||
|
|
||||||
MELLANOX ETHERNET SWITCH DRIVERS
|
MELLANOX ETHERNET SWITCH DRIVERS
|
||||||
M: Jiri Pirko <jiri@nvidia.com>
|
|
||||||
M: Ido Schimmel <idosch@nvidia.com>
|
M: Ido Schimmel <idosch@nvidia.com>
|
||||||
|
M: Petr Machata <petrm@nvidia.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://www.mellanox.com
|
W: http://www.mellanox.com
|
||||||
|
@ -15593,7 +15603,7 @@ F: drivers/scsi/qedi/
|
||||||
|
|
||||||
QLOGIC QL4xxx ETHERNET DRIVER
|
QLOGIC QL4xxx ETHERNET DRIVER
|
||||||
M: Ariel Elior <aelior@marvell.com>
|
M: Ariel Elior <aelior@marvell.com>
|
||||||
M: GR-everest-linux-l2@marvell.com
|
M: Manish Chopra <manishc@marvell.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/qlogic/qed/
|
F: drivers/net/ethernet/qlogic/qed/
|
||||||
|
@ -15760,6 +15770,15 @@ S: Maintained
|
||||||
F: Documentation/devicetree/bindings/net/qcom,ethqos.txt
|
F: Documentation/devicetree/bindings/net/qcom,ethqos.txt
|
||||||
F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
|
F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
|
||||||
|
|
||||||
|
QUALCOMM FASTRPC DRIVER
|
||||||
|
M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
M: Amol Maheshwari <amahesh@qti.qualcomm.com>
|
||||||
|
L: linux-arm-msm@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/misc/qcom,fastrpc.txt
|
||||||
|
F: drivers/misc/fastrpc.c
|
||||||
|
F: include/uapi/misc/fastrpc.h
|
||||||
|
|
||||||
QUALCOMM GENERIC INTERFACE I2C DRIVER
|
QUALCOMM GENERIC INTERFACE I2C DRIVER
|
||||||
M: Akash Asthana <akashast@codeaurora.org>
|
M: Akash Asthana <akashast@codeaurora.org>
|
||||||
M: Mukesh Savaliya <msavaliy@codeaurora.org>
|
M: Mukesh Savaliya <msavaliy@codeaurora.org>
|
||||||
|
@ -15968,6 +15987,7 @@ F: arch/mips/generic/board-ranchu.c
|
||||||
|
|
||||||
RANDOM NUMBER DRIVER
|
RANDOM NUMBER DRIVER
|
||||||
M: "Theodore Ts'o" <tytso@mit.edu>
|
M: "Theodore Ts'o" <tytso@mit.edu>
|
||||||
|
M: Jason A. Donenfeld <Jason@zx2c4.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/random.c
|
F: drivers/char/random.c
|
||||||
|
|
||||||
|
@ -16490,6 +16510,12 @@ T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/allwinner,sun8i-a83t-de2-rotate.yaml
|
F: Documentation/devicetree/bindings/media/allwinner,sun8i-a83t-de2-rotate.yaml
|
||||||
F: drivers/media/platform/sunxi/sun8i-rotate/
|
F: drivers/media/platform/sunxi/sun8i-rotate/
|
||||||
|
|
||||||
|
RPMSG TTY DRIVER
|
||||||
|
M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
|
||||||
|
L: linux-remoteproc@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/tty/rpmsg_tty.c
|
||||||
|
|
||||||
RTL2830 MEDIA DRIVER
|
RTL2830 MEDIA DRIVER
|
||||||
M: Antti Palosaari <crope@iki.fi>
|
M: Antti Palosaari <crope@iki.fi>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -16573,7 +16599,7 @@ F: drivers/video/fbdev/savage/
|
||||||
S390
|
S390
|
||||||
M: Heiko Carstens <hca@linux.ibm.com>
|
M: Heiko Carstens <hca@linux.ibm.com>
|
||||||
M: Vasily Gorbik <gor@linux.ibm.com>
|
M: Vasily Gorbik <gor@linux.ibm.com>
|
||||||
M: Christian Borntraeger <borntraeger@de.ibm.com>
|
M: Christian Borntraeger <borntraeger@linux.ibm.com>
|
||||||
R: Alexander Gordeev <agordeev@linux.ibm.com>
|
R: Alexander Gordeev <agordeev@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -16611,8 +16637,8 @@ W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
F: drivers/iommu/s390-iommu.c
|
F: drivers/iommu/s390-iommu.c
|
||||||
|
|
||||||
S390 IUCV NETWORK LAYER
|
S390 IUCV NETWORK LAYER
|
||||||
M: Julian Wiedmann <jwi@linux.ibm.com>
|
M: Alexandra Winter <wintera@linux.ibm.com>
|
||||||
M: Karsten Graul <kgraul@linux.ibm.com>
|
M: Wenjia Zhang <wenjia@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -16622,8 +16648,8 @@ F: include/net/iucv/
|
||||||
F: net/iucv/
|
F: net/iucv/
|
||||||
|
|
||||||
S390 NETWORK DRIVERS
|
S390 NETWORK DRIVERS
|
||||||
M: Julian Wiedmann <jwi@linux.ibm.com>
|
M: Alexandra Winter <wintera@linux.ibm.com>
|
||||||
M: Karsten Graul <kgraul@linux.ibm.com>
|
M: Wenjia Zhang <wenjia@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -18483,6 +18509,7 @@ F: include/uapi/linux/pkt_sched.h
|
||||||
F: include/uapi/linux/tc_act/
|
F: include/uapi/linux/tc_act/
|
||||||
F: include/uapi/linux/tc_ematch/
|
F: include/uapi/linux/tc_ematch/
|
||||||
F: net/sched/
|
F: net/sched/
|
||||||
|
F: tools/testing/selftests/tc-testing
|
||||||
|
|
||||||
TC90522 MEDIA DRIVER
|
TC90522 MEDIA DRIVER
|
||||||
M: Akihiro Tsukada <tskd08@gmail.com>
|
M: Akihiro Tsukada <tskd08@gmail.com>
|
||||||
|
@ -19031,11 +19058,12 @@ F: drivers/mmc/host/tifm_sd.c
|
||||||
F: include/linux/tifm.h
|
F: include/linux/tifm.h
|
||||||
|
|
||||||
TI KEYSTONE MULTICORE NAVIGATOR DRIVERS
|
TI KEYSTONE MULTICORE NAVIGATOR DRIVERS
|
||||||
|
M: Nishanth Menon <nm@ti.com>
|
||||||
M: Santosh Shilimkar <ssantosh@kernel.org>
|
M: Santosh Shilimkar <ssantosh@kernel.org>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
|
||||||
F: drivers/soc/ti/*
|
F: drivers/soc/ti/*
|
||||||
|
|
||||||
TI LM49xxx FAMILY ASoC CODEC DRIVERS
|
TI LM49xxx FAMILY ASoC CODEC DRIVERS
|
||||||
|
@ -20317,7 +20345,8 @@ F: arch/x86/include/asm/vmware.h
|
||||||
F: arch/x86/kernel/cpu/vmware.c
|
F: arch/x86/kernel/cpu/vmware.c
|
||||||
|
|
||||||
VMWARE PVRDMA DRIVER
|
VMWARE PVRDMA DRIVER
|
||||||
M: Adit Ranadive <aditr@vmware.com>
|
M: Bryan Tan <bryantan@vmware.com>
|
||||||
|
M: Vishnu Dasa <vdasa@vmware.com>
|
||||||
M: VMware PV-Drivers <pv-drivers@vmware.com>
|
M: VMware PV-Drivers <pv-drivers@vmware.com>
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
16
Makefile
16
Makefile
|
@ -2,8 +2,8 @@
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 16
|
PATCHLEVEL = 16
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc5
|
||||||
NAME = Trick or Treat
|
NAME = Gobble Gobble
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
@ -789,7 +789,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
|
||||||
KBUILD_CFLAGS += $(stackp-flags-y)
|
KBUILD_CFLAGS += $(stackp-flags-y)
|
||||||
|
|
||||||
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
|
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
|
||||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH:"%"=%)
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
KBUILD_CPPFLAGS += -Qunused-arguments
|
KBUILD_CPPFLAGS += -Qunused-arguments
|
||||||
|
@ -1374,17 +1374,17 @@ endif
|
||||||
|
|
||||||
ifneq ($(dtstree),)
|
ifneq ($(dtstree),)
|
||||||
|
|
||||||
%.dtb: dt_binding_check include/config/kernel.release scripts_dtc
|
%.dtb: include/config/kernel.release scripts_dtc
|
||||||
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ $(dtstree)/$*.dt.yaml
|
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
||||||
|
|
||||||
%.dtbo: dt_binding_check include/config/kernel.release scripts_dtc
|
%.dtbo: include/config/kernel.release scripts_dtc
|
||||||
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ $(dtstree)/$*.dt.yaml
|
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
||||||
|
|
||||||
PHONY += dtbs dtbs_install dtbs_check
|
PHONY += dtbs dtbs_install dtbs_check
|
||||||
dtbs: include/config/kernel.release scripts_dtc
|
dtbs: include/config/kernel.release scripts_dtc
|
||||||
$(Q)$(MAKE) $(build)=$(dtstree)
|
$(Q)$(MAKE) $(build)=$(dtstree)
|
||||||
|
|
||||||
ifneq ($(filter dtbs_check %.dtb %.dtbo, $(MAKECMDGOALS)),)
|
ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
|
||||||
export CHECK_DTBS=y
|
export CHECK_DTBS=y
|
||||||
dtbs: dt_binding_check
|
dtbs: dt_binding_check
|
||||||
endif
|
endif
|
||||||
|
|
10
arch/Kconfig
10
arch/Kconfig
|
@ -991,6 +991,16 @@ config HAVE_ARCH_COMPAT_MMAP_BASES
|
||||||
and vice-versa 32-bit applications to call 64-bit mmap().
|
and vice-versa 32-bit applications to call 64-bit mmap().
|
||||||
Required for applications doing different bitness syscalls.
|
Required for applications doing different bitness syscalls.
|
||||||
|
|
||||||
|
config PAGE_SIZE_LESS_THAN_64KB
|
||||||
|
def_bool y
|
||||||
|
depends on !ARM64_64K_PAGES
|
||||||
|
depends on !IA64_PAGE_SIZE_64KB
|
||||||
|
depends on !PAGE_SIZE_64KB
|
||||||
|
depends on !PARISC_PAGE_SIZE_64KB
|
||||||
|
depends on !PPC_64K_PAGES
|
||||||
|
depends on !PPC_256K_PAGES
|
||||||
|
depends on !PAGE_SIZE_256KB
|
||||||
|
|
||||||
# This allows to use a set of generic functions to determine mmap base
|
# This allows to use a set of generic functions to determine mmap base
|
||||||
# address by giving priority to top-down scheme only if the process
|
# address by giving priority to top-down scheme only if the process
|
||||||
# is not in legacy mode (compat task, unlimited stack size or
|
# is not in legacy mode (compat task, unlimited stack size or
|
||||||
|
|
|
@ -488,3 +488,4 @@
|
||||||
556 common landlock_restrict_self sys_landlock_restrict_self
|
556 common landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 557 reserved for memfd_secret
|
# 557 reserved for memfd_secret
|
||||||
558 common process_mrelease sys_process_mrelease
|
558 common process_mrelease sys_process_mrelease
|
||||||
|
559 common futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -36,7 +36,6 @@ void __flush_dcache_page(phys_addr_t paddr, unsigned long vaddr);
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
|
|
||||||
void flush_dcache_page(struct page *page);
|
void flush_dcache_page(struct page *page);
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
|
|
||||||
void dma_cache_wback_inv(phys_addr_t start, unsigned long sz);
|
void dma_cache_wback_inv(phys_addr_t start, unsigned long sz);
|
||||||
void dma_cache_inv(phys_addr_t start, unsigned long sz);
|
void dma_cache_inv(phys_addr_t start, unsigned long sz);
|
||||||
|
|
|
@ -1462,6 +1462,7 @@ config HIGHMEM
|
||||||
bool "High Memory Support"
|
bool "High Memory Support"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select KMAP_LOCAL
|
select KMAP_LOCAL
|
||||||
|
select KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
|
||||||
help
|
help
|
||||||
The address space of ARM processors is only 4 Gigabytes large
|
The address space of ARM processors is only 4 Gigabytes large
|
||||||
and it has to accommodate user address space, kernel address
|
and it has to accommodate user address space, kernel address
|
||||||
|
|
|
@ -506,11 +506,17 @@ pcie0: pcie@7d500000 {
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "pcie", "msi";
|
interrupt-names = "pcie", "msi";
|
||||||
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
|
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
|
||||||
interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143
|
interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143
|
||||||
|
IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 0 0 2 &gicv2 GIC_SPI 144
|
||||||
|
IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 0 0 3 &gicv2 GIC_SPI 145
|
||||||
|
IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<0 0 0 4 &gicv2 GIC_SPI 146
|
||||||
IRQ_TYPE_LEVEL_HIGH>;
|
IRQ_TYPE_LEVEL_HIGH>;
|
||||||
msi-controller;
|
msi-controller;
|
||||||
msi-parent = <&pcie0>;
|
msi-parent = <&pcie0>;
|
||||||
|
|
|
@ -242,6 +242,8 @@ chipcommon: chipcommon@0 {
|
||||||
|
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie0: pcie@12000 {
|
pcie0: pcie@12000 {
|
||||||
|
@ -408,7 +410,7 @@ uart2: serial@18008000 {
|
||||||
i2c0: i2c@18009000 {
|
i2c0: i2c@18009000 {
|
||||||
compatible = "brcm,iproc-i2c";
|
compatible = "brcm,iproc-i2c";
|
||||||
reg = <0x18009000 0x50>;
|
reg = <0x18009000 0x50>;
|
||||||
interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
|
|
|
@ -290,7 +290,6 @@ extern void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr
|
||||||
*/
|
*/
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
extern void flush_dcache_page(struct page *);
|
extern void flush_dcache_page(struct page *);
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
|
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_KERNEL_VMAP_RANGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_KERNEL_VMAP_RANGE 1
|
||||||
static inline void flush_kernel_vmap_range(void *addr, int size)
|
static inline void flush_kernel_vmap_range(void *addr, int size)
|
||||||
|
|
|
@ -33,7 +33,7 @@ extern void __iomem *sdr_ctl_base_addr;
|
||||||
u32 socfpga_sdram_self_refresh(u32 sdr_base);
|
u32 socfpga_sdram_self_refresh(u32 sdr_base);
|
||||||
extern unsigned int socfpga_sdram_self_refresh_sz;
|
extern unsigned int socfpga_sdram_self_refresh_sz;
|
||||||
|
|
||||||
extern char secondary_trampoline, secondary_trampoline_end;
|
extern char secondary_trampoline[], secondary_trampoline_end[];
|
||||||
|
|
||||||
extern unsigned long socfpga_cpu1start_addr;
|
extern unsigned long socfpga_cpu1start_addr;
|
||||||
|
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
|
|
||||||
static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
int trampoline_size = &secondary_trampoline_end - &secondary_trampoline;
|
int trampoline_size = secondary_trampoline_end - secondary_trampoline;
|
||||||
|
|
||||||
if (socfpga_cpu1start_addr) {
|
if (socfpga_cpu1start_addr) {
|
||||||
/* This will put CPU #1 into reset. */
|
/* This will put CPU #1 into reset. */
|
||||||
writel(RSTMGR_MPUMODRST_CPU1,
|
writel(RSTMGR_MPUMODRST_CPU1,
|
||||||
rst_manager_base_addr + SOCFPGA_RSTMGR_MODMPURST);
|
rst_manager_base_addr + SOCFPGA_RSTMGR_MODMPURST);
|
||||||
|
|
||||||
memcpy(phys_to_virt(0), &secondary_trampoline, trampoline_size);
|
memcpy(phys_to_virt(0), secondary_trampoline, trampoline_size);
|
||||||
|
|
||||||
writel(__pa_symbol(secondary_startup),
|
writel(__pa_symbol(secondary_startup),
|
||||||
sys_manager_base_addr + (socfpga_cpu1start_addr & 0x000000ff));
|
sys_manager_base_addr + (socfpga_cpu1start_addr & 0x000000ff));
|
||||||
|
@ -45,12 +45,12 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
|
|
||||||
static int socfpga_a10_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
static int socfpga_a10_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
int trampoline_size = &secondary_trampoline_end - &secondary_trampoline;
|
int trampoline_size = secondary_trampoline_end - secondary_trampoline;
|
||||||
|
|
||||||
if (socfpga_cpu1start_addr) {
|
if (socfpga_cpu1start_addr) {
|
||||||
writel(RSTMGR_MPUMODRST_CPU1, rst_manager_base_addr +
|
writel(RSTMGR_MPUMODRST_CPU1, rst_manager_base_addr +
|
||||||
SOCFPGA_A10_RSTMGR_MODMPURST);
|
SOCFPGA_A10_RSTMGR_MODMPURST);
|
||||||
memcpy(phys_to_virt(0), &secondary_trampoline, trampoline_size);
|
memcpy(phys_to_virt(0), secondary_trampoline, trampoline_size);
|
||||||
|
|
||||||
writel(__pa_symbol(secondary_startup),
|
writel(__pa_symbol(secondary_startup),
|
||||||
sys_manager_base_addr + (socfpga_cpu1start_addr & 0x00000fff));
|
sys_manager_base_addr + (socfpga_cpu1start_addr & 0x00000fff));
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
* Copyright The Asahi Linux Contributors
|
* Copyright The Asahi Linux Contributors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
#include <dt-bindings/interrupt-controller/apple-aic.h>
|
#include <dt-bindings/interrupt-controller/apple-aic.h>
|
||||||
#include <dt-bindings/interrupt-controller/irq.h>
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
#include <dt-bindings/pinctrl/apple.h>
|
#include <dt-bindings/pinctrl/apple.h>
|
||||||
|
@ -281,7 +282,7 @@ pcie0: pcie@690000000 {
|
||||||
port00: pci@0,0 {
|
port00: pci@0,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
reg = <0x0 0x0 0x0 0x0 0x0>;
|
reg = <0x0 0x0 0x0 0x0 0x0>;
|
||||||
reset-gpios = <&pinctrl_ap 152 0>;
|
reset-gpios = <&pinctrl_ap 152 GPIO_ACTIVE_LOW>;
|
||||||
max-link-speed = <2>;
|
max-link-speed = <2>;
|
||||||
|
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
|
@ -301,7 +302,7 @@ port00: pci@0,0 {
|
||||||
port01: pci@1,0 {
|
port01: pci@1,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
reg = <0x800 0x0 0x0 0x0 0x0>;
|
reg = <0x800 0x0 0x0 0x0 0x0>;
|
||||||
reset-gpios = <&pinctrl_ap 153 0>;
|
reset-gpios = <&pinctrl_ap 153 GPIO_ACTIVE_LOW>;
|
||||||
max-link-speed = <2>;
|
max-link-speed = <2>;
|
||||||
|
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
|
@ -321,7 +322,7 @@ port01: pci@1,0 {
|
||||||
port02: pci@2,0 {
|
port02: pci@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
reg = <0x1000 0x0 0x0 0x0 0x0>;
|
reg = <0x1000 0x0 0x0 0x0 0x0>;
|
||||||
reset-gpios = <&pinctrl_ap 33 0>;
|
reset-gpios = <&pinctrl_ap 33 GPIO_ACTIVE_LOW>;
|
||||||
max-link-speed = <1>;
|
max-link-speed = <1>;
|
||||||
|
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
|
|
|
@ -296,8 +296,7 @@ ufs_0: ufs0@17e00000 {
|
||||||
pinctrl-0 = <&ufs_rst_n &ufs_refclk_out>;
|
pinctrl-0 = <&ufs_rst_n &ufs_refclk_out>;
|
||||||
phys = <&ufs_0_phy>;
|
phys = <&ufs_0_phy>;
|
||||||
phy-names = "ufs-phy";
|
phy-names = "ufs-phy";
|
||||||
samsung,sysreg = <&syscon_fsys2>;
|
samsung,sysreg = <&syscon_fsys2 0x710>;
|
||||||
samsung,ufs-shareability-reg-offset = <0x710>;
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
#define HAVE_FUNCTION_GRAPH_FP_TEST
|
#define HAVE_FUNCTION_GRAPH_FP_TEST
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HAVE_FUNCTION_GRAPH_RET_ADDR_PTR means that the architecture can provide a
|
||||||
|
* "return address pointer" which can be used to uniquely identify a return
|
||||||
|
* address which has been overwritten.
|
||||||
|
*
|
||||||
|
* On arm64 we use the address of the caller's frame record, which remains the
|
||||||
|
* same for the lifetime of the instrumented function, unlike the return
|
||||||
|
* address in the LR.
|
||||||
|
*/
|
||||||
|
#define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
|
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
|
||||||
#define ARCH_SUPPORTS_FTRACE_OPS 1
|
#define ARCH_SUPPORTS_FTRACE_OPS 1
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
|
#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
|
||||||
|
|
||||||
/* TCR_EL2 Registers bits */
|
/* TCR_EL2 Registers bits */
|
||||||
#define TCR_EL2_RES1 ((1 << 31) | (1 << 23))
|
#define TCR_EL2_RES1 ((1U << 31) | (1 << 23))
|
||||||
#define TCR_EL2_TBI (1 << 20)
|
#define TCR_EL2_TBI (1 << 20)
|
||||||
#define TCR_EL2_PS_SHIFT 16
|
#define TCR_EL2_PS_SHIFT 16
|
||||||
#define TCR_EL2_PS_MASK (7 << TCR_EL2_PS_SHIFT)
|
#define TCR_EL2_PS_MASK (7 << TCR_EL2_PS_SHIFT)
|
||||||
|
@ -276,7 +276,7 @@
|
||||||
#define CPTR_EL2_TFP_SHIFT 10
|
#define CPTR_EL2_TFP_SHIFT 10
|
||||||
|
|
||||||
/* Hyp Coprocessor Trap Register */
|
/* Hyp Coprocessor Trap Register */
|
||||||
#define CPTR_EL2_TCPAC (1 << 31)
|
#define CPTR_EL2_TCPAC (1U << 31)
|
||||||
#define CPTR_EL2_TAM (1 << 30)
|
#define CPTR_EL2_TAM (1 << 30)
|
||||||
#define CPTR_EL2_TTA (1 << 20)
|
#define CPTR_EL2_TTA (1 << 20)
|
||||||
#define CPTR_EL2_TFP (1 << CPTR_EL2_TFP_SHIFT)
|
#define CPTR_EL2_TFP (1 << CPTR_EL2_TFP_SHIFT)
|
||||||
|
|
|
@ -76,7 +76,7 @@ static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t ptep,
|
||||||
static inline void
|
static inline void
|
||||||
pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
|
pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
|
||||||
{
|
{
|
||||||
VM_BUG_ON(mm != &init_mm);
|
VM_BUG_ON(mm && mm != &init_mm);
|
||||||
__pmd_populate(pmdp, __pa(ptep), PMD_TYPE_TABLE | PMD_TABLE_UXN);
|
__pmd_populate(pmdp, __pa(ptep), PMD_TYPE_TABLE | PMD_TABLE_UXN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,9 +47,6 @@ struct stack_info {
|
||||||
* @prev_type: The type of stack this frame record was on, or a synthetic
|
* @prev_type: The type of stack this frame record was on, or a synthetic
|
||||||
* value of STACK_TYPE_UNKNOWN. This is used to detect a
|
* value of STACK_TYPE_UNKNOWN. This is used to detect a
|
||||||
* transition from one stack to another.
|
* transition from one stack to another.
|
||||||
*
|
|
||||||
* @graph: When FUNCTION_GRAPH_TRACER is selected, holds the index of a
|
|
||||||
* replacement lr value in the ftrace graph stack.
|
|
||||||
*/
|
*/
|
||||||
struct stackframe {
|
struct stackframe {
|
||||||
unsigned long fp;
|
unsigned long fp;
|
||||||
|
@ -57,9 +54,6 @@ struct stackframe {
|
||||||
DECLARE_BITMAP(stacks_done, __NR_STACK_TYPES);
|
DECLARE_BITMAP(stacks_done, __NR_STACK_TYPES);
|
||||||
unsigned long prev_fp;
|
unsigned long prev_fp;
|
||||||
enum stack_type prev_type;
|
enum stack_type prev_type;
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
||||||
int graph;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_KRETPROBES
|
#ifdef CONFIG_KRETPROBES
|
||||||
struct llist_node *kr_cur;
|
struct llist_node *kr_cur;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -281,12 +281,22 @@ do { \
|
||||||
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We must not call into the scheduler between uaccess_ttbr0_enable() and
|
||||||
|
* uaccess_ttbr0_disable(). As `x` and `ptr` could contain blocking functions,
|
||||||
|
* we must evaluate these outside of the critical section.
|
||||||
|
*/
|
||||||
#define __raw_get_user(x, ptr, err) \
|
#define __raw_get_user(x, ptr, err) \
|
||||||
do { \
|
do { \
|
||||||
|
__typeof__(*(ptr)) __user *__rgu_ptr = (ptr); \
|
||||||
|
__typeof__(x) __rgu_val; \
|
||||||
__chk_user_ptr(ptr); \
|
__chk_user_ptr(ptr); \
|
||||||
|
\
|
||||||
uaccess_ttbr0_enable(); \
|
uaccess_ttbr0_enable(); \
|
||||||
__raw_get_mem("ldtr", x, ptr, err); \
|
__raw_get_mem("ldtr", __rgu_val, __rgu_ptr, err); \
|
||||||
uaccess_ttbr0_disable(); \
|
uaccess_ttbr0_disable(); \
|
||||||
|
\
|
||||||
|
(x) = __rgu_val; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define __get_user_error(x, ptr, err) \
|
#define __get_user_error(x, ptr, err) \
|
||||||
|
@ -310,14 +320,22 @@ do { \
|
||||||
|
|
||||||
#define get_user __get_user
|
#define get_user __get_user
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We must not call into the scheduler between __uaccess_enable_tco_async() and
|
||||||
|
* __uaccess_disable_tco_async(). As `dst` and `src` may contain blocking
|
||||||
|
* functions, we must evaluate these outside of the critical section.
|
||||||
|
*/
|
||||||
#define __get_kernel_nofault(dst, src, type, err_label) \
|
#define __get_kernel_nofault(dst, src, type, err_label) \
|
||||||
do { \
|
do { \
|
||||||
|
__typeof__(dst) __gkn_dst = (dst); \
|
||||||
|
__typeof__(src) __gkn_src = (src); \
|
||||||
int __gkn_err = 0; \
|
int __gkn_err = 0; \
|
||||||
\
|
\
|
||||||
__uaccess_enable_tco_async(); \
|
__uaccess_enable_tco_async(); \
|
||||||
__raw_get_mem("ldr", *((type *)(dst)), \
|
__raw_get_mem("ldr", *((type *)(__gkn_dst)), \
|
||||||
(__force type *)(src), __gkn_err); \
|
(__force type *)(__gkn_src), __gkn_err); \
|
||||||
__uaccess_disable_tco_async(); \
|
__uaccess_disable_tco_async(); \
|
||||||
|
\
|
||||||
if (unlikely(__gkn_err)) \
|
if (unlikely(__gkn_err)) \
|
||||||
goto err_label; \
|
goto err_label; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -351,11 +369,19 @@ do { \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We must not call into the scheduler between uaccess_ttbr0_enable() and
|
||||||
|
* uaccess_ttbr0_disable(). As `x` and `ptr` could contain blocking functions,
|
||||||
|
* we must evaluate these outside of the critical section.
|
||||||
|
*/
|
||||||
#define __raw_put_user(x, ptr, err) \
|
#define __raw_put_user(x, ptr, err) \
|
||||||
do { \
|
do { \
|
||||||
__chk_user_ptr(ptr); \
|
__typeof__(*(ptr)) __user *__rpu_ptr = (ptr); \
|
||||||
|
__typeof__(*(ptr)) __rpu_val = (x); \
|
||||||
|
__chk_user_ptr(__rpu_ptr); \
|
||||||
|
\
|
||||||
uaccess_ttbr0_enable(); \
|
uaccess_ttbr0_enable(); \
|
||||||
__raw_put_mem("sttr", x, ptr, err); \
|
__raw_put_mem("sttr", __rpu_val, __rpu_ptr, err); \
|
||||||
uaccess_ttbr0_disable(); \
|
uaccess_ttbr0_disable(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -380,14 +406,22 @@ do { \
|
||||||
|
|
||||||
#define put_user __put_user
|
#define put_user __put_user
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We must not call into the scheduler between __uaccess_enable_tco_async() and
|
||||||
|
* __uaccess_disable_tco_async(). As `dst` and `src` may contain blocking
|
||||||
|
* functions, we must evaluate these outside of the critical section.
|
||||||
|
*/
|
||||||
#define __put_kernel_nofault(dst, src, type, err_label) \
|
#define __put_kernel_nofault(dst, src, type, err_label) \
|
||||||
do { \
|
do { \
|
||||||
|
__typeof__(dst) __pkn_dst = (dst); \
|
||||||
|
__typeof__(src) __pkn_src = (src); \
|
||||||
int __pkn_err = 0; \
|
int __pkn_err = 0; \
|
||||||
\
|
\
|
||||||
__uaccess_enable_tco_async(); \
|
__uaccess_enable_tco_async(); \
|
||||||
__raw_put_mem("str", *((type *)(src)), \
|
__raw_put_mem("str", *((type *)(__pkn_src)), \
|
||||||
(__force type *)(dst), __pkn_err); \
|
(__force type *)(__pkn_dst), __pkn_err); \
|
||||||
__uaccess_disable_tco_async(); \
|
__uaccess_disable_tco_async(); \
|
||||||
|
\
|
||||||
if (unlikely(__pkn_err)) \
|
if (unlikely(__pkn_err)) \
|
||||||
goto err_label; \
|
goto err_label; \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
|
@ -77,11 +77,17 @@
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
SYM_CODE_START(ftrace_regs_caller)
|
SYM_CODE_START(ftrace_regs_caller)
|
||||||
|
#ifdef BTI_C
|
||||||
|
BTI_C
|
||||||
|
#endif
|
||||||
ftrace_regs_entry 1
|
ftrace_regs_entry 1
|
||||||
b ftrace_common
|
b ftrace_common
|
||||||
SYM_CODE_END(ftrace_regs_caller)
|
SYM_CODE_END(ftrace_regs_caller)
|
||||||
|
|
||||||
SYM_CODE_START(ftrace_caller)
|
SYM_CODE_START(ftrace_caller)
|
||||||
|
#ifdef BTI_C
|
||||||
|
BTI_C
|
||||||
|
#endif
|
||||||
ftrace_regs_entry 0
|
ftrace_regs_entry 0
|
||||||
b ftrace_common
|
b ftrace_common
|
||||||
SYM_CODE_END(ftrace_caller)
|
SYM_CODE_END(ftrace_caller)
|
||||||
|
|
|
@ -244,8 +244,6 @@ void arch_ftrace_update_code(int command)
|
||||||
* on the way back to parent. For this purpose, this function is called
|
* on the way back to parent. For this purpose, this function is called
|
||||||
* in _mcount() or ftrace_caller() to replace return address (*parent) on
|
* in _mcount() or ftrace_caller() to replace return address (*parent) on
|
||||||
* the call stack to return_to_handler.
|
* the call stack to return_to_handler.
|
||||||
*
|
|
||||||
* Note that @frame_pointer is used only for sanity check later.
|
|
||||||
*/
|
*/
|
||||||
void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
|
void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
|
||||||
unsigned long frame_pointer)
|
unsigned long frame_pointer)
|
||||||
|
@ -263,8 +261,10 @@ void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
|
||||||
*/
|
*/
|
||||||
old = *parent;
|
old = *parent;
|
||||||
|
|
||||||
if (!function_graph_enter(old, self_addr, frame_pointer, NULL))
|
if (!function_graph_enter(old, self_addr, frame_pointer,
|
||||||
|
(void *)frame_pointer)) {
|
||||||
*parent = return_hooker;
|
*parent = return_hooker;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||||
|
|
|
@ -147,7 +147,7 @@ int machine_kexec_post_load(struct kimage *kimage)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
kimage->arch.ttbr1 = __pa(trans_pgd);
|
kimage->arch.ttbr1 = __pa(trans_pgd);
|
||||||
kimage->arch.zero_page = __pa(empty_zero_page);
|
kimage->arch.zero_page = __pa_symbol(empty_zero_page);
|
||||||
|
|
||||||
reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start;
|
reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start;
|
||||||
memcpy(reloc_code, __relocate_new_kernel_start, reloc_size);
|
memcpy(reloc_code, __relocate_new_kernel_start, reloc_size);
|
||||||
|
|
|
@ -38,9 +38,6 @@ void start_backtrace(struct stackframe *frame, unsigned long fp,
|
||||||
{
|
{
|
||||||
frame->fp = fp;
|
frame->fp = fp;
|
||||||
frame->pc = pc;
|
frame->pc = pc;
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
||||||
frame->graph = 0;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_KRETPROBES
|
#ifdef CONFIG_KRETPROBES
|
||||||
frame->kr_cur = NULL;
|
frame->kr_cur = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,20 +113,23 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame)
|
||||||
frame->prev_fp = fp;
|
frame->prev_fp = fp;
|
||||||
frame->prev_type = info.type;
|
frame->prev_type = info.type;
|
||||||
|
|
||||||
|
frame->pc = ptrauth_strip_insn_pac(frame->pc);
|
||||||
|
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||||
if (tsk->ret_stack &&
|
if (tsk->ret_stack &&
|
||||||
(ptrauth_strip_insn_pac(frame->pc) == (unsigned long)return_to_handler)) {
|
(frame->pc == (unsigned long)return_to_handler)) {
|
||||||
struct ftrace_ret_stack *ret_stack;
|
unsigned long orig_pc;
|
||||||
/*
|
/*
|
||||||
* This is a case where function graph tracer has
|
* This is a case where function graph tracer has
|
||||||
* modified a return address (LR) in a stack frame
|
* modified a return address (LR) in a stack frame
|
||||||
* to hook a function return.
|
* to hook a function return.
|
||||||
* So replace it to an original value.
|
* So replace it to an original value.
|
||||||
*/
|
*/
|
||||||
ret_stack = ftrace_graph_get_ret_stack(tsk, frame->graph++);
|
orig_pc = ftrace_graph_ret_addr(tsk, NULL, frame->pc,
|
||||||
if (WARN_ON_ONCE(!ret_stack))
|
(void *)frame->fp);
|
||||||
|
if (WARN_ON_ONCE(frame->pc == orig_pc))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
frame->pc = ret_stack->ret;
|
frame->pc = orig_pc;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||||
#ifdef CONFIG_KRETPROBES
|
#ifdef CONFIG_KRETPROBES
|
||||||
|
@ -137,8 +137,6 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame)
|
||||||
frame->pc = kretprobe_find_ret_addr(tsk, (void *)frame->fp, &frame->kr_cur);
|
frame->pc = kretprobe_find_ret_addr(tsk, (void *)frame->fp, &frame->kr_cur);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
frame->pc = ptrauth_strip_insn_pac(frame->pc);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(unwind_frame);
|
NOKPROBE_SYMBOL(unwind_frame);
|
||||||
|
|
|
@ -223,7 +223,14 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
||||||
r = 1;
|
r = 1;
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_NR_VCPUS:
|
case KVM_CAP_NR_VCPUS:
|
||||||
r = num_online_cpus();
|
/*
|
||||||
|
* ARM64 treats KVM_CAP_NR_CPUS differently from all other
|
||||||
|
* architectures, as it does not always bound it to
|
||||||
|
* KVM_CAP_MAX_VCPUS. It should not matter much because
|
||||||
|
* this is just an advisory value.
|
||||||
|
*/
|
||||||
|
r = min_t(unsigned int, num_online_cpus(),
|
||||||
|
kvm_arm_default_max_vcpus());
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_MAX_VCPUS:
|
case KVM_CAP_MAX_VCPUS:
|
||||||
case KVM_CAP_MAX_VCPU_ID:
|
case KVM_CAP_MAX_VCPU_ID:
|
||||||
|
|
|
@ -403,6 +403,8 @@ typedef bool (*exit_handler_fn)(struct kvm_vcpu *, u64 *);
|
||||||
|
|
||||||
static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu);
|
static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
|
static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allow the hypervisor to handle the exit with an exit handler if it has one.
|
* Allow the hypervisor to handle the exit with an exit handler if it has one.
|
||||||
*
|
*
|
||||||
|
@ -429,6 +431,18 @@ static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
*/
|
*/
|
||||||
static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Save PSTATE early so that we can evaluate the vcpu mode
|
||||||
|
* early on.
|
||||||
|
*/
|
||||||
|
vcpu->arch.ctxt.regs.pstate = read_sysreg_el2(SYS_SPSR);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether we want to repaint the state one way or
|
||||||
|
* another.
|
||||||
|
*/
|
||||||
|
early_exit_filter(vcpu, exit_code);
|
||||||
|
|
||||||
if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ)
|
if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ)
|
||||||
vcpu->arch.fault.esr_el2 = read_sysreg_el2(SYS_ESR);
|
vcpu->arch.fault.esr_el2 = read_sysreg_el2(SYS_ESR);
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,12 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt)
|
||||||
static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt)
|
static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt)
|
||||||
{
|
{
|
||||||
ctxt->regs.pc = read_sysreg_el2(SYS_ELR);
|
ctxt->regs.pc = read_sysreg_el2(SYS_ELR);
|
||||||
ctxt->regs.pstate = read_sysreg_el2(SYS_SPSR);
|
/*
|
||||||
|
* Guest PSTATE gets saved at guest fixup time in all
|
||||||
|
* cases. We still need to handle the nVHE host side here.
|
||||||
|
*/
|
||||||
|
if (!has_vhe() && ctxt->__hyp_running_vcpu)
|
||||||
|
ctxt->regs.pstate = read_sysreg_el2(SYS_SPSR);
|
||||||
|
|
||||||
if (cpus_have_final_cap(ARM64_HAS_RAS_EXTN))
|
if (cpus_have_final_cap(ARM64_HAS_RAS_EXTN))
|
||||||
ctxt_sys_reg(ctxt, DISR_EL1) = read_sysreg_s(SYS_VDISR_EL2);
|
ctxt_sys_reg(ctxt, DISR_EL1) = read_sysreg_s(SYS_VDISR_EL2);
|
||||||
|
|
|
@ -233,7 +233,7 @@ static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu)
|
||||||
* Returns false if the guest ran in AArch32 when it shouldn't have, and
|
* Returns false if the guest ran in AArch32 when it shouldn't have, and
|
||||||
* thus should exit to the host, or true if a the guest run loop can continue.
|
* thus should exit to the host, or true if a the guest run loop can continue.
|
||||||
*/
|
*/
|
||||||
static bool handle_aarch32_guest(struct kvm_vcpu *vcpu, u64 *exit_code)
|
static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
{
|
{
|
||||||
struct kvm *kvm = kern_hyp_va(vcpu->kvm);
|
struct kvm *kvm = kern_hyp_va(vcpu->kvm);
|
||||||
|
|
||||||
|
@ -248,10 +248,7 @@ static bool handle_aarch32_guest(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
vcpu->arch.target = -1;
|
vcpu->arch.target = -1;
|
||||||
*exit_code &= BIT(ARM_EXIT_WITH_SERROR_BIT);
|
*exit_code &= BIT(ARM_EXIT_WITH_SERROR_BIT);
|
||||||
*exit_code |= ARM_EXCEPTION_IL;
|
*exit_code |= ARM_EXCEPTION_IL;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Switch to the guest for legacy non-VHE systems */
|
/* Switch to the guest for legacy non-VHE systems */
|
||||||
|
@ -316,9 +313,6 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
|
||||||
/* Jump in the fire! */
|
/* Jump in the fire! */
|
||||||
exit_code = __guest_enter(vcpu);
|
exit_code = __guest_enter(vcpu);
|
||||||
|
|
||||||
if (unlikely(!handle_aarch32_guest(vcpu, &exit_code)))
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* And we're baaack! */
|
/* And we're baaack! */
|
||||||
} while (fixup_guest_exit(vcpu, &exit_code));
|
} while (fixup_guest_exit(vcpu, &exit_code));
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,10 @@ static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu)
|
||||||
return hyp_exit_handlers;
|
return hyp_exit_handlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/* Switch to the guest for VHE systems running in EL2 */
|
/* Switch to the guest for VHE systems running in EL2 */
|
||||||
static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
|
static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
|
|
@ -209,7 +209,7 @@ asmlinkage void do_trap_illinsn(struct pt_regs *regs)
|
||||||
|
|
||||||
asmlinkage void do_trap_fpe(struct pt_regs *regs)
|
asmlinkage void do_trap_fpe(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CPU_HAS_FP
|
#ifdef CONFIG_CPU_HAS_FPU
|
||||||
return fpu_fpe(regs);
|
return fpu_fpe(regs);
|
||||||
#else
|
#else
|
||||||
do_trap_error(regs, SIGILL, ILL_ILLOPC, regs->pc,
|
do_trap_error(regs, SIGILL, ILL_ILLOPC, regs->pc,
|
||||||
|
@ -219,7 +219,7 @@ asmlinkage void do_trap_fpe(struct pt_regs *regs)
|
||||||
|
|
||||||
asmlinkage void do_trap_priv(struct pt_regs *regs)
|
asmlinkage void do_trap_priv(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CPU_HAS_FP
|
#ifdef CONFIG_CPU_HAS_FPU
|
||||||
if (user_mode(regs) && fpu_libc_helper(regs))
|
if (user_mode(regs) && fpu_libc_helper(regs))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
/*
|
|
||||||
* Timer support for Hexagon
|
|
||||||
*
|
|
||||||
* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_TIMER_REGS_H
|
|
||||||
#define _ASM_TIMER_REGS_H
|
|
||||||
|
|
||||||
/* This stuff should go into a platform specific file */
|
|
||||||
#define TCX0_CLK_RATE 19200
|
|
||||||
#define TIMER_ENABLE 0
|
|
||||||
#define TIMER_CLR_ON_MATCH 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 8x50 HDD Specs 5-8. Simulator co-sim not fixed until
|
|
||||||
* release 1.1, and then it's "adjustable" and probably not defaulted.
|
|
||||||
*/
|
|
||||||
#define RTOS_TIMER_INT 3
|
|
||||||
#ifdef CONFIG_HEXAGON_COMET
|
|
||||||
#define RTOS_TIMER_REGS_ADDR 0xAB000000UL
|
|
||||||
#endif
|
|
||||||
#define SLEEP_CLK_RATE 32000
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -7,11 +7,10 @@
|
||||||
#define _ASM_TIMEX_H
|
#define _ASM_TIMEX_H
|
||||||
|
|
||||||
#include <asm-generic/timex.h>
|
#include <asm-generic/timex.h>
|
||||||
#include <asm/timer-regs.h>
|
|
||||||
#include <asm/hexagon_vm.h>
|
#include <asm/hexagon_vm.h>
|
||||||
|
|
||||||
/* Using TCX0 as our clock. CLOCK_TICK_RATE scheduled to be removed. */
|
/* Using TCX0 as our clock. CLOCK_TICK_RATE scheduled to be removed. */
|
||||||
#define CLOCK_TICK_RATE TCX0_CLK_RATE
|
#define CLOCK_TICK_RATE 19200
|
||||||
|
|
||||||
#define ARCH_HAS_READ_CURRENT_TIMER
|
#define ARCH_HAS_READ_CURRENT_TIMER
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
vmlinux.lds
|
|
@ -17,9 +17,10 @@
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include <asm/timer-regs.h>
|
|
||||||
#include <asm/hexagon_vm.h>
|
#include <asm/hexagon_vm.h>
|
||||||
|
|
||||||
|
#define TIMER_ENABLE BIT(0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For the clocksource we need:
|
* For the clocksource we need:
|
||||||
* pcycle frequency (600MHz)
|
* pcycle frequency (600MHz)
|
||||||
|
@ -33,6 +34,13 @@ cycles_t pcycle_freq_mhz;
|
||||||
cycles_t thread_freq_mhz;
|
cycles_t thread_freq_mhz;
|
||||||
cycles_t sleep_clk_freq;
|
cycles_t sleep_clk_freq;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8x50 HDD Specs 5-8. Simulator co-sim not fixed until
|
||||||
|
* release 1.1, and then it's "adjustable" and probably not defaulted.
|
||||||
|
*/
|
||||||
|
#define RTOS_TIMER_INT 3
|
||||||
|
#define RTOS_TIMER_REGS_ADDR 0xAB000000UL
|
||||||
|
|
||||||
static struct resource rtos_timer_resources[] = {
|
static struct resource rtos_timer_resources[] = {
|
||||||
{
|
{
|
||||||
.start = RTOS_TIMER_REGS_ADDR,
|
.start = RTOS_TIMER_REGS_ADDR,
|
||||||
|
@ -80,7 +88,7 @@ static int set_next_event(unsigned long delta, struct clock_event_device *evt)
|
||||||
iowrite32(0, &rtos_timer->clear);
|
iowrite32(0, &rtos_timer->clear);
|
||||||
|
|
||||||
iowrite32(delta, &rtos_timer->match);
|
iowrite32(delta, &rtos_timer->match);
|
||||||
iowrite32(1 << TIMER_ENABLE, &rtos_timer->enable);
|
iowrite32(TIMER_ENABLE, &rtos_timer->enable);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ void __raw_readsw(const void __iomem *addr, void *data, int len)
|
||||||
*dst++ = *src;
|
*dst++ = *src;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__raw_readsw);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __raw_writesw - read words a short at a time
|
* __raw_writesw - read words a short at a time
|
||||||
|
@ -47,6 +48,7 @@ void __raw_writesw(void __iomem *addr, const void *data, int len)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__raw_writesw);
|
||||||
|
|
||||||
/* Pretty sure len is pre-adjusted for the length of the access already */
|
/* Pretty sure len is pre-adjusted for the length of the access already */
|
||||||
void __raw_readsl(const void __iomem *addr, void *data, int len)
|
void __raw_readsl(const void __iomem *addr, void *data, int len)
|
||||||
|
@ -62,6 +64,7 @@ void __raw_readsl(const void __iomem *addr, void *data, int len)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__raw_readsl);
|
||||||
|
|
||||||
void __raw_writesl(void __iomem *addr, const void *data, int len)
|
void __raw_writesl(void __iomem *addr, const void *data, int len)
|
||||||
{
|
{
|
||||||
|
@ -76,3 +79,4 @@ void __raw_writesl(void __iomem *addr, const void *data, int len)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__raw_writesl);
|
||||||
|
|
|
@ -369,3 +369,4 @@
|
||||||
446 common landlock_restrict_self sys_landlock_restrict_self
|
446 common landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 common process_mrelease sys_process_mrelease
|
448 common process_mrelease sys_process_mrelease
|
||||||
|
449 common futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -250,7 +250,6 @@ static inline void __flush_page_to_ram(void *vaddr)
|
||||||
|
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
#define flush_dcache_page(page) __flush_page_to_ram(page_address(page))
|
#define flush_dcache_page(page) __flush_page_to_ram(page_address(page))
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||||
#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page))
|
#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page))
|
||||||
|
|
|
@ -448,3 +448,4 @@
|
||||||
446 common landlock_restrict_self sys_landlock_restrict_self
|
446 common landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 common process_mrelease sys_process_mrelease
|
448 common process_mrelease sys_process_mrelease
|
||||||
|
449 common futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -1145,7 +1145,7 @@ asmlinkage void set_esp0(unsigned long ssp)
|
||||||
*/
|
*/
|
||||||
asmlinkage void fpsp040_die(void)
|
asmlinkage void fpsp040_die(void)
|
||||||
{
|
{
|
||||||
force_fatal_sig(SIGSEGV);
|
force_exit_sig(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_M68KFPU_EMU
|
#ifdef CONFIG_M68KFPU_EMU
|
||||||
|
|
|
@ -454,3 +454,4 @@
|
||||||
446 common landlock_restrict_self sys_landlock_restrict_self
|
446 common landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 common process_mrelease sys_process_mrelease
|
448 common process_mrelease sys_process_mrelease
|
||||||
|
449 common futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -3097,7 +3097,7 @@ config STACKTRACE_SUPPORT
|
||||||
config PGTABLE_LEVELS
|
config PGTABLE_LEVELS
|
||||||
int
|
int
|
||||||
default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48
|
default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48
|
||||||
default 3 if 64BIT && !PAGE_SIZE_64KB
|
default 3 if 64BIT && (!PAGE_SIZE_64KB || MIPS_VA_BITS_48)
|
||||||
default 2
|
default 2
|
||||||
|
|
||||||
config MIPS_AUTO_PFN_OFFSET
|
config MIPS_AUTO_PFN_OFFSET
|
||||||
|
|
|
@ -381,6 +381,12 @@ void clk_disable(struct clk *clk)
|
||||||
|
|
||||||
EXPORT_SYMBOL(clk_disable);
|
EXPORT_SYMBOL(clk_disable);
|
||||||
|
|
||||||
|
struct clk *clk_get_parent(struct clk *clk)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_get_parent);
|
||||||
|
|
||||||
unsigned long clk_get_rate(struct clk *clk)
|
unsigned long clk_get_rate(struct clk *clk)
|
||||||
{
|
{
|
||||||
if (!clk)
|
if (!clk)
|
||||||
|
|
|
@ -52,7 +52,7 @@ endif
|
||||||
|
|
||||||
vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o
|
vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o
|
||||||
|
|
||||||
vmlinuzobjs-$(CONFIG_KERNEL_ZSTD) += $(obj)/bswapdi.o
|
vmlinuzobjs-$(CONFIG_KERNEL_ZSTD) += $(obj)/bswapdi.o $(obj)/ashldi3.o
|
||||||
|
|
||||||
targets := $(notdir $(vmlinuzobjs-y))
|
targets := $(notdir $(vmlinuzobjs-y))
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ static unsigned int __init gen_fdt_mem_array(
|
||||||
__init int yamon_dt_append_memory(void *fdt,
|
__init int yamon_dt_append_memory(void *fdt,
|
||||||
const struct yamon_mem_region *regions)
|
const struct yamon_mem_region *regions)
|
||||||
{
|
{
|
||||||
unsigned long phys_memsize, memsize;
|
unsigned long phys_memsize = 0, memsize;
|
||||||
__be32 mem_array[2 * MAX_MEM_ARRAY_ENTRIES];
|
__be32 mem_array[2 * MAX_MEM_ARRAY_ENTRIES];
|
||||||
unsigned int mem_entries;
|
unsigned int mem_entries;
|
||||||
int i, err, mem_off;
|
int i, err, mem_off;
|
||||||
|
|
|
@ -61,8 +61,6 @@ static inline void flush_dcache_page(struct page *page)
|
||||||
SetPageDcacheDirty(page);
|
SetPageDcacheDirty(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
|
|
||||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||||
|
|
||||||
|
|
|
@ -1734,8 +1734,6 @@ static inline void decode_cpucfg(struct cpuinfo_mips *c)
|
||||||
|
|
||||||
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
|
||||||
|
|
||||||
/* All Loongson processors covered here define ExcCode 16 as GSExc. */
|
/* All Loongson processors covered here define ExcCode 16 as GSExc. */
|
||||||
c->options |= MIPS_CPU_GSEXCEX;
|
c->options |= MIPS_CPU_GSEXCEX;
|
||||||
|
|
||||||
|
@ -1796,6 +1794,8 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
panic("Unknown Loongson Processor ID!");
|
panic("Unknown Loongson Processor ID!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decode_configs(c);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) { }
|
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) { }
|
||||||
|
|
|
@ -185,7 +185,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
seq_puts(m, " tx39_cache");
|
seq_puts(m, " tx39_cache");
|
||||||
if (cpu_has_octeon_cache)
|
if (cpu_has_octeon_cache)
|
||||||
seq_puts(m, " octeon_cache");
|
seq_puts(m, " octeon_cache");
|
||||||
if (cpu_has_fpu)
|
if (raw_cpu_has_fpu)
|
||||||
seq_puts(m, " fpu");
|
seq_puts(m, " fpu");
|
||||||
if (cpu_has_32fpr)
|
if (cpu_has_32fpr)
|
||||||
seq_puts(m, " 32fpr");
|
seq_puts(m, " 32fpr");
|
||||||
|
|
|
@ -387,3 +387,4 @@
|
||||||
446 n32 landlock_restrict_self sys_landlock_restrict_self
|
446 n32 landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 n32 process_mrelease sys_process_mrelease
|
448 n32 process_mrelease sys_process_mrelease
|
||||||
|
449 n32 futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -363,3 +363,4 @@
|
||||||
446 n64 landlock_restrict_self sys_landlock_restrict_self
|
446 n64 landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 n64 process_mrelease sys_process_mrelease
|
448 n64 process_mrelease sys_process_mrelease
|
||||||
|
449 n64 futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -436,3 +436,4 @@
|
||||||
446 o32 landlock_restrict_self sys_landlock_restrict_self
|
446 o32 landlock_restrict_self sys_landlock_restrict_self
|
||||||
# 447 reserved for memfd_secret
|
# 447 reserved for memfd_secret
|
||||||
448 o32 process_mrelease sys_process_mrelease
|
448 o32 process_mrelease sys_process_mrelease
|
||||||
|
449 o32 futex_waitv sys_futex_waitv
|
||||||
|
|
|
@ -1067,7 +1067,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
||||||
r = 1;
|
r = 1;
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_NR_VCPUS:
|
case KVM_CAP_NR_VCPUS:
|
||||||
r = num_online_cpus();
|
r = min_t(unsigned int, num_online_cpus(), KVM_MAX_VCPUS);
|
||||||
break;
|
break;
|
||||||
case KVM_CAP_MAX_VCPUS:
|
case KVM_CAP_MAX_VCPUS:
|
||||||
r = KVM_MAX_VCPUS;
|
r = KVM_MAX_VCPUS;
|
||||||
|
|
|
@ -158,6 +158,12 @@ void clk_deactivate(struct clk *clk)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_deactivate);
|
EXPORT_SYMBOL(clk_deactivate);
|
||||||
|
|
||||||
|
struct clk *clk_get_parent(struct clk *clk)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_get_parent);
|
||||||
|
|
||||||
static inline u32 get_counter_resolution(void)
|
static inline u32 get_counter_resolution(void)
|
||||||
{
|
{
|
||||||
u32 res;
|
u32 res;
|
||||||
|
|
|
@ -98,7 +98,7 @@ do { \
|
||||||
#define emit(...) __emit(__VA_ARGS__)
|
#define emit(...) __emit(__VA_ARGS__)
|
||||||
|
|
||||||
/* Workaround for R10000 ll/sc errata */
|
/* Workaround for R10000 ll/sc errata */
|
||||||
#ifdef CONFIG_WAR_R10000
|
#ifdef CONFIG_WAR_R10000_LLSC
|
||||||
#define LLSC_beqz beqzl
|
#define LLSC_beqz beqzl
|
||||||
#else
|
#else
|
||||||
#define LLSC_beqz beqz
|
#define LLSC_beqz beqz
|
||||||
|
|
|
@ -27,7 +27,6 @@ void flush_cache_vunmap(unsigned long start, unsigned long end);
|
||||||
|
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
void flush_dcache_page(struct page *page);
|
void flush_dcache_page(struct page *page);
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
|
void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
|
||||||
unsigned long vaddr, void *dst, void *src, int len);
|
unsigned long vaddr, void *dst, void *src, int len);
|
||||||
void copy_from_user_page(struct vm_area_struct *vma, struct page *page,
|
void copy_from_user_page(struct vm_area_struct *vma, struct page *page,
|
||||||
|
|
|
@ -29,7 +29,6 @@ extern void flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr,
|
||||||
unsigned long pfn);
|
unsigned long pfn);
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
void flush_dcache_page(struct page *page);
|
void flush_dcache_page(struct page *page);
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
|
|
||||||
extern void flush_icache_range(unsigned long start, unsigned long end);
|
extern void flush_icache_range(unsigned long start, unsigned long end);
|
||||||
extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
|
extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
|
||||||
|
|
|
@ -15,7 +15,12 @@
|
||||||
# Mike Shaver, Helge Deller and Martin K. Petersen
|
# Mike Shaver, Helge Deller and Martin K. Petersen
|
||||||
#
|
#
|
||||||
|
|
||||||
|
ifdef CONFIG_PARISC_SELF_EXTRACT
|
||||||
|
boot := arch/parisc/boot
|
||||||
|
KBUILD_IMAGE := $(boot)/bzImage
|
||||||
|
else
|
||||||
KBUILD_IMAGE := vmlinuz
|
KBUILD_IMAGE := vmlinuz
|
||||||
|
endif
|
||||||
|
|
||||||
NM = sh $(srctree)/arch/parisc/nm
|
NM = sh $(srctree)/arch/parisc/nm
|
||||||
CHECKFLAGS += -D__hppa__=1
|
CHECKFLAGS += -D__hppa__=1
|
||||||
|
|
|
@ -231,6 +231,7 @@ CONFIG_CRYPTO_DEFLATE=y
|
||||||
CONFIG_CRC_CCITT=m
|
CONFIG_CRC_CCITT=m
|
||||||
CONFIG_CRC_T10DIF=y
|
CONFIG_CRC_T10DIF=y
|
||||||
CONFIG_FONTS=y
|
CONFIG_FONTS=y
|
||||||
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
CONFIG_LOCALVERSION="-64bit"
|
CONFIG_LOCALVERSION="-64bit"
|
||||||
# CONFIG_LOCALVERSION_AUTO is not set
|
# CONFIG_LOCALVERSION_AUTO is not set
|
||||||
|
CONFIG_KERNEL_LZ4=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_AUDIT=y
|
||||||
CONFIG_BSD_PROCESS_ACCT=y
|
CONFIG_BSD_PROCESS_ACCT=y
|
||||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||||
CONFIG_TASKSTATS=y
|
CONFIG_TASKSTATS=y
|
||||||
|
@ -35,6 +37,7 @@ CONFIG_MODVERSIONS=y
|
||||||
CONFIG_BLK_DEV_INTEGRITY=y
|
CONFIG_BLK_DEV_INTEGRITY=y
|
||||||
CONFIG_BINFMT_MISC=m
|
CONFIG_BINFMT_MISC=m
|
||||||
# CONFIG_COMPACTION is not set
|
# CONFIG_COMPACTION is not set
|
||||||
|
CONFIG_MEMORY_FAILURE=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -65,12 +68,15 @@ CONFIG_SCSI_ISCSI_ATTRS=y
|
||||||
CONFIG_SCSI_SRP_ATTRS=y
|
CONFIG_SCSI_SRP_ATTRS=y
|
||||||
CONFIG_ISCSI_BOOT_SYSFS=y
|
CONFIG_ISCSI_BOOT_SYSFS=y
|
||||||
CONFIG_SCSI_MPT2SAS=y
|
CONFIG_SCSI_MPT2SAS=y
|
||||||
CONFIG_SCSI_LASI700=m
|
CONFIG_SCSI_LASI700=y
|
||||||
CONFIG_SCSI_SYM53C8XX_2=y
|
CONFIG_SCSI_SYM53C8XX_2=y
|
||||||
CONFIG_SCSI_ZALON=y
|
CONFIG_SCSI_ZALON=y
|
||||||
CONFIG_SCSI_QLA_ISCSI=m
|
CONFIG_SCSI_QLA_ISCSI=m
|
||||||
CONFIG_SCSI_DH=y
|
CONFIG_SCSI_DH=y
|
||||||
CONFIG_ATA=y
|
CONFIG_ATA=y
|
||||||
|
CONFIG_SATA_SIL=y
|
||||||
|
CONFIG_SATA_SIS=y
|
||||||
|
CONFIG_SATA_VIA=y
|
||||||
CONFIG_PATA_NS87415=y
|
CONFIG_PATA_NS87415=y
|
||||||
CONFIG_PATA_SIL680=y
|
CONFIG_PATA_SIL680=y
|
||||||
CONFIG_ATA_GENERIC=y
|
CONFIG_ATA_GENERIC=y
|
||||||
|
@ -79,6 +85,7 @@ CONFIG_MD_LINEAR=m
|
||||||
CONFIG_BLK_DEV_DM=m
|
CONFIG_BLK_DEV_DM=m
|
||||||
CONFIG_DM_RAID=m
|
CONFIG_DM_RAID=m
|
||||||
CONFIG_DM_UEVENT=y
|
CONFIG_DM_UEVENT=y
|
||||||
|
CONFIG_DM_AUDIT=y
|
||||||
CONFIG_FUSION=y
|
CONFIG_FUSION=y
|
||||||
CONFIG_FUSION_SPI=y
|
CONFIG_FUSION_SPI=y
|
||||||
CONFIG_FUSION_SAS=y
|
CONFIG_FUSION_SAS=y
|
||||||
|
@ -196,10 +203,15 @@ CONFIG_FB_MATROX_G=y
|
||||||
CONFIG_FB_MATROX_I2C=y
|
CONFIG_FB_MATROX_I2C=y
|
||||||
CONFIG_FB_MATROX_MAVEN=y
|
CONFIG_FB_MATROX_MAVEN=y
|
||||||
CONFIG_FB_RADEON=y
|
CONFIG_FB_RADEON=y
|
||||||
|
CONFIG_LOGO=y
|
||||||
|
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||||
CONFIG_HIDRAW=y
|
CONFIG_HIDRAW=y
|
||||||
CONFIG_HID_PID=y
|
CONFIG_HID_PID=y
|
||||||
CONFIG_USB_HIDDEV=y
|
CONFIG_USB_HIDDEV=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_EHCI_HCD=y
|
||||||
|
CONFIG_USB_OHCI_HCD=y
|
||||||
|
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||||
CONFIG_UIO=y
|
CONFIG_UIO=y
|
||||||
CONFIG_UIO_PDRV_GENIRQ=m
|
CONFIG_UIO_PDRV_GENIRQ=m
|
||||||
CONFIG_UIO_AEC=m
|
CONFIG_UIO_AEC=m
|
||||||
|
|
|
@ -3,38 +3,19 @@
|
||||||
* Copyright (C) 1999 Hewlett-Packard (Frank Rowand)
|
* Copyright (C) 1999 Hewlett-Packard (Frank Rowand)
|
||||||
* Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org>
|
* Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org>
|
||||||
* Copyright (C) 1999 SuSE GmbH
|
* Copyright (C) 1999 SuSE GmbH
|
||||||
|
* Copyright (C) 2021 Helge Deller <deller@gmx.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _PARISC_ASSEMBLY_H
|
#ifndef _PARISC_ASSEMBLY_H
|
||||||
#define _PARISC_ASSEMBLY_H
|
#define _PARISC_ASSEMBLY_H
|
||||||
|
|
||||||
#define CALLEE_FLOAT_FRAME_SIZE 80
|
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
#define LDREG ldd
|
|
||||||
#define STREG std
|
|
||||||
#define LDREGX ldd,s
|
|
||||||
#define LDREGM ldd,mb
|
|
||||||
#define STREGM std,ma
|
|
||||||
#define SHRREG shrd
|
|
||||||
#define SHLREG shld
|
|
||||||
#define ANDCM andcm,*
|
|
||||||
#define COND(x) * ## x
|
|
||||||
#define RP_OFFSET 16
|
#define RP_OFFSET 16
|
||||||
#define FRAME_SIZE 128
|
#define FRAME_SIZE 128
|
||||||
#define CALLEE_REG_FRAME_SIZE 144
|
#define CALLEE_REG_FRAME_SIZE 144
|
||||||
#define REG_SZ 8
|
#define REG_SZ 8
|
||||||
#define ASM_ULONG_INSN .dword
|
#define ASM_ULONG_INSN .dword
|
||||||
#else /* CONFIG_64BIT */
|
#else /* CONFIG_64BIT */
|
||||||
#define LDREG ldw
|
|
||||||
#define STREG stw
|
|
||||||
#define LDREGX ldwx,s
|
|
||||||
#define LDREGM ldwm
|
|
||||||
#define STREGM stwm
|
|
||||||
#define SHRREG shr
|
|
||||||
#define SHLREG shlw
|
|
||||||
#define ANDCM andcm
|
|
||||||
#define COND(x) x
|
|
||||||
#define RP_OFFSET 20
|
#define RP_OFFSET 20
|
||||||
#define FRAME_SIZE 64
|
#define FRAME_SIZE 64
|
||||||
#define CALLEE_REG_FRAME_SIZE 128
|
#define CALLEE_REG_FRAME_SIZE 128
|
||||||
|
@ -45,6 +26,7 @@
|
||||||
/* Frame alignment for 32- and 64-bit */
|
/* Frame alignment for 32- and 64-bit */
|
||||||
#define FRAME_ALIGN 64
|
#define FRAME_ALIGN 64
|
||||||
|
|
||||||
|
#define CALLEE_FLOAT_FRAME_SIZE 80
|
||||||
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
|
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
|
@ -67,6 +49,28 @@
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
#define LDREG ldd
|
||||||
|
#define STREG std
|
||||||
|
#define LDREGX ldd,s
|
||||||
|
#define LDREGM ldd,mb
|
||||||
|
#define STREGM std,ma
|
||||||
|
#define SHRREG shrd
|
||||||
|
#define SHLREG shld
|
||||||
|
#define ANDCM andcm,*
|
||||||
|
#define COND(x) * ## x
|
||||||
|
#else /* CONFIG_64BIT */
|
||||||
|
#define LDREG ldw
|
||||||
|
#define STREG stw
|
||||||
|
#define LDREGX ldwx,s
|
||||||
|
#define LDREGM ldwm
|
||||||
|
#define STREGM stwm
|
||||||
|
#define SHRREG shr
|
||||||
|
#define SHLREG shlw
|
||||||
|
#define ANDCM andcm
|
||||||
|
#define COND(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
/* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
|
/* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
|
||||||
* work around that for now... */
|
* work around that for now... */
|
||||||
|
@ -143,6 +147,17 @@
|
||||||
extrd,u \r, 63-(\sa), 64-(\sa), \t
|
extrd,u \r, 63-(\sa), 64-(\sa), \t
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
/* Extract unsigned for 32- and 64-bit
|
||||||
|
* The extru instruction leaves the most significant 32 bits of the
|
||||||
|
* target register in an undefined state on PA 2.0 systems. */
|
||||||
|
.macro extru_safe r, p, len, t
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
extrd,u \r, 32+(\p), \len, \t
|
||||||
|
#else
|
||||||
|
extru \r, \p, \len, \t
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
/* load 32-bit 'value' into 'reg' compensating for the ldil
|
/* load 32-bit 'value' into 'reg' compensating for the ldil
|
||||||
* sign-extension when running in wide mode.
|
* sign-extension when running in wide mode.
|
||||||
* WARNING!! neither 'value' nor 'reg' can be expressions
|
* WARNING!! neither 'value' nor 'reg' can be expressions
|
||||||
|
|
|
@ -50,7 +50,6 @@ void invalidate_kernel_vmap_range(void *vaddr, int size);
|
||||||
|
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
void flush_dcache_page(struct page *page);
|
void flush_dcache_page(struct page *page);
|
||||||
void flush_dcache_folio(struct folio *folio);
|
|
||||||
|
|
||||||
#define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages)
|
#define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages)
|
||||||
#define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages)
|
#define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/stringify.h>
|
||||||
#include <asm/assembly.h>
|
#include <asm/assembly.h>
|
||||||
|
|
||||||
#define JUMP_LABEL_NOP_SIZE 4
|
#define JUMP_LABEL_NOP_SIZE 4
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef _ASM_PARISC_RT_SIGFRAME_H
|
#ifndef _ASM_PARISC_RT_SIGFRAME_H
|
||||||
#define _ASM_PARISC_RT_SIGFRAME_H
|
#define _ASM_PARISC_RT_SIGFRAME_H
|
||||||
|
|
||||||
#define SIGRETURN_TRAMP 3
|
#define SIGRETURN_TRAMP 4
|
||||||
#define SIGRESTARTBLOCK_TRAMP 5
|
#define SIGRESTARTBLOCK_TRAMP 5
|
||||||
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
|
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ verify "$3"
|
||||||
if [ -n "${INSTALLKERNEL}" ]; then
|
if [ -n "${INSTALLKERNEL}" ]; then
|
||||||
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
||||||
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
||||||
|
if [ -x /usr/sbin/${INSTALLKERNEL} ]; then exec /usr/sbin/${INSTALLKERNEL} "$@"; fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Default install
|
# Default install
|
||||||
|
|
|
@ -366,17 +366,9 @@
|
||||||
*/
|
*/
|
||||||
.macro L2_ptep pmd,pte,index,va,fault
|
.macro L2_ptep pmd,pte,index,va,fault
|
||||||
#if CONFIG_PGTABLE_LEVELS == 3
|
#if CONFIG_PGTABLE_LEVELS == 3
|
||||||
extru \va,31-ASM_PMD_SHIFT,ASM_BITS_PER_PMD,\index
|
extru_safe \va,31-ASM_PMD_SHIFT,ASM_BITS_PER_PMD,\index
|
||||||
#else
|
#else
|
||||||
# if defined(CONFIG_64BIT)
|
extru_safe \va,31-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
|
||||||
extrd,u \va,63-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
|
|
||||||
#else
|
|
||||||
# if PAGE_SIZE > 4096
|
|
||||||
extru \va,31-ASM_PGDIR_SHIFT,32-ASM_PGDIR_SHIFT,\index
|
|
||||||
# else
|
|
||||||
extru \va,31-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
dep %r0,31,PAGE_SHIFT,\pmd /* clear offset */
|
dep %r0,31,PAGE_SHIFT,\pmd /* clear offset */
|
||||||
#if CONFIG_PGTABLE_LEVELS < 3
|
#if CONFIG_PGTABLE_LEVELS < 3
|
||||||
|
@ -386,7 +378,7 @@
|
||||||
bb,>=,n \pmd,_PxD_PRESENT_BIT,\fault
|
bb,>=,n \pmd,_PxD_PRESENT_BIT,\fault
|
||||||
dep %r0,31,PxD_FLAG_SHIFT,\pmd /* clear flags */
|
dep %r0,31,PxD_FLAG_SHIFT,\pmd /* clear flags */
|
||||||
SHLREG \pmd,PxD_VALUE_SHIFT,\pmd
|
SHLREG \pmd,PxD_VALUE_SHIFT,\pmd
|
||||||
extru \va,31-PAGE_SHIFT,ASM_BITS_PER_PTE,\index
|
extru_safe \va,31-PAGE_SHIFT,ASM_BITS_PER_PTE,\index
|
||||||
dep %r0,31,PAGE_SHIFT,\pmd /* clear offset */
|
dep %r0,31,PAGE_SHIFT,\pmd /* clear offset */
|
||||||
shladd \index,BITS_PER_PTE_ENTRY,\pmd,\pmd /* pmd is now pte */
|
shladd \index,BITS_PER_PTE_ENTRY,\pmd,\pmd /* pmd is now pte */
|
||||||
.endm
|
.endm
|
||||||
|
|
|
@ -288,21 +288,22 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
|
||||||
already in userspace. The first words of tramp are used to
|
already in userspace. The first words of tramp are used to
|
||||||
save the previous sigrestartblock trampoline that might be
|
save the previous sigrestartblock trampoline that might be
|
||||||
on the stack. We start the sigreturn trampoline at
|
on the stack. We start the sigreturn trampoline at
|
||||||
SIGRESTARTBLOCK_TRAMP. */
|
SIGRESTARTBLOCK_TRAMP+X. */
|
||||||
err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
|
err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
|
||||||
&frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
|
&frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
|
||||||
err |= __put_user(INSN_BLE_SR2_R0,
|
err |= __put_user(INSN_LDI_R20,
|
||||||
&frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
|
&frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
|
||||||
err |= __put_user(INSN_LDI_R20,
|
err |= __put_user(INSN_BLE_SR2_R0,
|
||||||
&frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
|
&frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
|
||||||
|
err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]);
|
||||||
|
|
||||||
start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0];
|
start = (unsigned long) &frame->tramp[0];
|
||||||
end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3];
|
end = (unsigned long) &frame->tramp[TRAMP_SIZE];
|
||||||
flush_user_dcache_range_asm(start, end);
|
flush_user_dcache_range_asm(start, end);
|
||||||
flush_user_icache_range_asm(start, end);
|
flush_user_icache_range_asm(start, end);
|
||||||
|
|
||||||
/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
|
/* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
|
||||||
* TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP
|
* TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
|
||||||
* So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
|
* So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
|
||||||
*/
|
*/
|
||||||
rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
|
rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct compat_regfile {
|
||||||
compat_int_t rf_sar;
|
compat_int_t rf_sar;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define COMPAT_SIGRETURN_TRAMP 3
|
#define COMPAT_SIGRETURN_TRAMP 4
|
||||||
#define COMPAT_SIGRESTARTBLOCK_TRAMP 5
|
#define COMPAT_SIGRESTARTBLOCK_TRAMP 5
|
||||||
#define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \
|
#define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \
|
||||||
COMPAT_SIGRESTARTBLOCK_TRAMP)
|
COMPAT_SIGRESTARTBLOCK_TRAMP)
|
||||||
|
|
|
@ -566,7 +566,7 @@ lws_compare_and_swap:
|
||||||
ldo R%lws_lock_start(%r20), %r28
|
ldo R%lws_lock_start(%r20), %r28
|
||||||
|
|
||||||
/* Extract eight bits from r26 and hash lock (Bits 3-11) */
|
/* Extract eight bits from r26 and hash lock (Bits 3-11) */
|
||||||
extru %r26, 28, 8, %r20
|
extru_safe %r26, 28, 8, %r20
|
||||||
|
|
||||||
/* Find lock to use, the hash is either one of 0 to
|
/* Find lock to use, the hash is either one of 0 to
|
||||||
15, multiplied by 16 (keep it 16-byte aligned)
|
15, multiplied by 16 (keep it 16-byte aligned)
|
||||||
|
@ -751,7 +751,7 @@ cas2_lock_start:
|
||||||
ldo R%lws_lock_start(%r20), %r28
|
ldo R%lws_lock_start(%r20), %r28
|
||||||
|
|
||||||
/* Extract eight bits from r26 and hash lock (Bits 3-11) */
|
/* Extract eight bits from r26 and hash lock (Bits 3-11) */
|
||||||
extru %r26, 28, 8, %r20
|
extru_safe %r26, 28, 8, %r20
|
||||||
|
|
||||||
/* Find lock to use, the hash is either one of 0 to
|
/* Find lock to use, the hash is either one of 0 to
|
||||||
15, multiplied by 16 (keep it 16-byte aligned)
|
15, multiplied by 16 (keep it 16-byte aligned)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue