mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
Merge 6.8-rc5 into usb-next
We need the USB fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
a09ebb32af
11
.mailmap
11
.mailmap
@ -191,10 +191,11 @@ Gao Xiang <xiang@kernel.org> <gaoxiang25@huawei.com>
|
||||
Gao Xiang <xiang@kernel.org> <hsiangkao@aol.com>
|
||||
Gao Xiang <xiang@kernel.org> <hsiangkao@linux.alibaba.com>
|
||||
Gao Xiang <xiang@kernel.org> <hsiangkao@redhat.com>
|
||||
Geliang Tang <geliang.tang@linux.dev> <geliang.tang@suse.com>
|
||||
Geliang Tang <geliang.tang@linux.dev> <geliangtang@xiaomi.com>
|
||||
Geliang Tang <geliang.tang@linux.dev> <geliangtang@gmail.com>
|
||||
Geliang Tang <geliang.tang@linux.dev> <geliangtang@163.com>
|
||||
Geliang Tang <geliang@kernel.org> <geliang.tang@linux.dev>
|
||||
Geliang Tang <geliang@kernel.org> <geliang.tang@suse.com>
|
||||
Geliang Tang <geliang@kernel.org> <geliangtang@xiaomi.com>
|
||||
Geliang Tang <geliang@kernel.org> <geliangtang@gmail.com>
|
||||
Geliang Tang <geliang@kernel.org> <geliangtang@163.com>
|
||||
Georgi Djakov <djakov@kernel.org> <georgi.djakov@linaro.org>
|
||||
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@de.ibm.com>
|
||||
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <gerald.schaefer@de.ibm.com>
|
||||
@ -289,6 +290,7 @@ Johan Hovold <johan@kernel.org> <johan@hovoldconsulting.com>
|
||||
John Crispin <john@phrozen.org> <blogic@openwrt.org>
|
||||
John Fastabend <john.fastabend@gmail.com> <john.r.fastabend@intel.com>
|
||||
John Keeping <john@keeping.me.uk> <john@metanate.com>
|
||||
John Moon <john@jmoon.dev> <quic_johmoo@quicinc.com>
|
||||
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
|
||||
John Stultz <johnstul@us.ibm.com>
|
||||
<jon.toppins+linux@gmail.com> <jtoppins@cumulusnetworks.com>
|
||||
@ -344,6 +346,7 @@ Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||
Leon Romanovsky <leon@kernel.org> <leon@leon.nu>
|
||||
Leon Romanovsky <leon@kernel.org> <leonro@mellanox.com>
|
||||
Leon Romanovsky <leon@kernel.org> <leonro@nvidia.com>
|
||||
Leo Yan <leo.yan@linux.dev> <leo.yan@linaro.org>
|
||||
Liam Mark <quic_lmark@quicinc.com> <lmark@codeaurora.org>
|
||||
Linas Vepstas <linas@austin.ibm.com>
|
||||
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
|
||||
|
@ -1,4 +1,4 @@
|
||||
What: /sys/class/<iface>/statistics/collisions
|
||||
What: /sys/class/net/<iface>/statistics/collisions
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -6,7 +6,7 @@ Description:
|
||||
Indicates the number of collisions seen by this network device.
|
||||
This value might not be relevant with all MAC layers.
|
||||
|
||||
What: /sys/class/<iface>/statistics/multicast
|
||||
What: /sys/class/net/<iface>/statistics/multicast
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -14,7 +14,7 @@ Description:
|
||||
Indicates the number of multicast packets received by this
|
||||
network device.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_bytes
|
||||
What: /sys/class/net/<iface>/statistics/rx_bytes
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -23,7 +23,7 @@ Description:
|
||||
See the network driver for the exact meaning of when this
|
||||
value is incremented.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_compressed
|
||||
What: /sys/class/net/<iface>/statistics/rx_compressed
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -32,7 +32,7 @@ Description:
|
||||
network device. This value might only be relevant for interfaces
|
||||
that support packet compression (e.g: PPP).
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_crc_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_crc_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -41,7 +41,7 @@ Description:
|
||||
by this network device. Note that the specific meaning might
|
||||
depend on the MAC layer used by the interface.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_dropped
|
||||
What: /sys/class/net/<iface>/statistics/rx_dropped
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -51,7 +51,7 @@ Description:
|
||||
packet processing. See the network driver for the exact
|
||||
meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -59,7 +59,7 @@ Description:
|
||||
Indicates the number of receive errors on this network device.
|
||||
See the network driver for the exact meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_fifo_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_fifo_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -68,7 +68,7 @@ Description:
|
||||
network device. See the network driver for the exact
|
||||
meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_frame_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_frame_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -78,7 +78,7 @@ Description:
|
||||
on the MAC layer protocol used. See the network driver for
|
||||
the exact meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_length_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_length_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -87,7 +87,7 @@ Description:
|
||||
error, oversized or undersized. See the network driver for the
|
||||
exact meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_missed_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_missed_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -96,7 +96,7 @@ Description:
|
||||
due to lack of capacity in the receive side. See the network
|
||||
driver for the exact meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_nohandler
|
||||
What: /sys/class/net/<iface>/statistics/rx_nohandler
|
||||
Date: February 2016
|
||||
KernelVersion: 4.6
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -104,7 +104,7 @@ Description:
|
||||
Indicates the number of received packets that were dropped on
|
||||
an inactive device by the network core.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_over_errors
|
||||
What: /sys/class/net/<iface>/statistics/rx_over_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -114,7 +114,7 @@ Description:
|
||||
(e.g: larger than MTU). See the network driver for the exact
|
||||
meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/rx_packets
|
||||
What: /sys/class/net/<iface>/statistics/rx_packets
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -122,7 +122,7 @@ Description:
|
||||
Indicates the total number of good packets received by this
|
||||
network device.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_aborted_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_aborted_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -132,7 +132,7 @@ Description:
|
||||
a medium collision). See the network driver for the exact
|
||||
meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_bytes
|
||||
What: /sys/class/net/<iface>/statistics/tx_bytes
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -143,7 +143,7 @@ Description:
|
||||
transmitted packets or all packets that have been queued for
|
||||
transmission.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_carrier_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_carrier_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -152,7 +152,7 @@ Description:
|
||||
because of carrier errors (e.g: physical link down). See the
|
||||
network driver for the exact meaning of this value.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_compressed
|
||||
What: /sys/class/net/<iface>/statistics/tx_compressed
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -161,7 +161,7 @@ Description:
|
||||
this might only be relevant for devices that support
|
||||
compression (e.g: PPP).
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_dropped
|
||||
What: /sys/class/net/<iface>/statistics/tx_dropped
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -170,7 +170,7 @@ Description:
|
||||
See the driver for the exact reasons as to why the packets were
|
||||
dropped.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -179,7 +179,7 @@ Description:
|
||||
a network device. See the driver for the exact reasons as to
|
||||
why the packets were dropped.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_fifo_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_fifo_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -188,7 +188,7 @@ Description:
|
||||
FIFO error. See the driver for the exact reasons as to why the
|
||||
packets were dropped.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_heartbeat_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_heartbeat_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -197,7 +197,7 @@ Description:
|
||||
reported as heartbeat errors. See the driver for the exact
|
||||
reasons as to why the packets were dropped.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_packets
|
||||
What: /sys/class/net/<iface>/statistics/tx_packets
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
@ -206,7 +206,7 @@ Description:
|
||||
device. See the driver for whether this reports the number of all
|
||||
attempted or successful transmissions.
|
||||
|
||||
What: /sys/class/<iface>/statistics/tx_window_errors
|
||||
What: /sys/class/net/<iface>/statistics/tx_window_errors
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
|
@ -4,18 +4,18 @@ KernelVersion: 6.5
|
||||
Contact: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Description:
|
||||
The "cells" folder contains one file per cell exposed by the
|
||||
NVMEM device. The name of the file is: <name>@<where>, with
|
||||
<name> being the cell name and <where> its location in the NVMEM
|
||||
device, in hexadecimal (without the '0x' prefix, to mimic device
|
||||
tree node names). The length of the file is the size of the cell
|
||||
(when known). The content of the file is the binary content of
|
||||
the cell (may sometimes be ASCII, likely without trailing
|
||||
character).
|
||||
NVMEM device. The name of the file is: "<name>@<byte>,<bit>",
|
||||
with <name> being the cell name and <where> its location in
|
||||
the NVMEM device, in hexadecimal bytes and bits (without the
|
||||
'0x' prefix, to mimic device tree node names). The length of
|
||||
the file is the size of the cell (when known). The content of
|
||||
the file is the binary content of the cell (may sometimes be
|
||||
ASCII, likely without trailing character).
|
||||
Note: This file is only present if CONFIG_NVMEM_SYSFS
|
||||
is enabled.
|
||||
|
||||
Example::
|
||||
|
||||
hexdump -C /sys/bus/nvmem/devices/1-00563/cells/product-name@d
|
||||
hexdump -C /sys/bus/nvmem/devices/1-00563/cells/product-name@d,0
|
||||
00000000 54 4e 34 38 4d 2d 50 2d 44 4e |TN48M-P-DN|
|
||||
0000000a
|
||||
|
@ -243,3 +243,10 @@ stable kernels.
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| ASR | ASR8601 | #8601001 | N/A |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Microsoft | Azure Cobalt 100| #2139208 | ARM64_ERRATUM_2139208 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Microsoft | Azure Cobalt 100| #2067961 | ARM64_ERRATUM_2067961 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Microsoft | Azure Cobalt 100| #2253138 | ARM64_ERRATUM_2253138 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
|
@ -28,7 +28,10 @@ $(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE
|
||||
find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \
|
||||
-name 'processed-schema*' \)
|
||||
|
||||
find_cmd = $(find_all_cmd) | sed 's|^$(srctree)/$(src)/||' | grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | sed 's|^|$(srctree)/$(src)/|'
|
||||
find_cmd = $(find_all_cmd) | \
|
||||
sed 's|^$(srctree)/||' | \
|
||||
grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | \
|
||||
sed 's|^|$(srctree)/|'
|
||||
CHK_DT_DOCS := $(shell $(find_cmd))
|
||||
|
||||
quiet_cmd_yamllint = LINT $(src)
|
||||
|
@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Ceva AHCI SATA Controller
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
description: |
|
||||
The Ceva SATA controller mostly conforms to the AHCI interface with some
|
||||
|
@ -29,19 +29,22 @@ properties:
|
||||
|
||||
audio-ports:
|
||||
description:
|
||||
Array of 8-bit values, 2 values per DAI (Documentation/sound/soc/dai.rst).
|
||||
Array of 2 values per DAI (Documentation/sound/soc/dai.rst).
|
||||
The implementation allows one or two DAIs.
|
||||
If two DAIs are defined, they must be of different type.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-matrix
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
items:
|
||||
minItems: 1
|
||||
items:
|
||||
- description: |
|
||||
The first value defines the DAI type: TDA998x_SPDIF or TDA998x_I2S
|
||||
(see include/dt-bindings/display/tda998x.h).
|
||||
enum: [ 1, 2 ]
|
||||
- description:
|
||||
The second value defines the tda998x AP_ENA reg content when the
|
||||
DAI in question is used.
|
||||
maximum: 0xff
|
||||
|
||||
'#sound-dai-cells':
|
||||
enum: [ 0, 1 ]
|
||||
|
@ -12,7 +12,8 @@ description:
|
||||
PS_MODE). Every pin can be configured as input/output.
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
|
@ -78,8 +78,8 @@ examples:
|
||||
pcie@0 {
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
ranges = <0x0 0x0 0x0 0x0 0x0 0x0>;
|
||||
reg = <0x0 0x0 0x0 0x0 0x0 0x0>;
|
||||
ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
|
||||
reg = <0x0 0x1000>;
|
||||
device_type = "pci";
|
||||
|
||||
switch@0,0 {
|
||||
|
@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Zynq UltraScale+ MPSoC and Versal reset
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
description: |
|
||||
The Zynq UltraScale+ MPSoC and Versal has several different resets.
|
||||
|
@ -7,7 +7,6 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Google SC7280-Herobrine ASoC sound card driver
|
||||
|
||||
maintainers:
|
||||
- Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
|
||||
- Judy Hsiao <judyhsiao@chromium.org>
|
||||
|
||||
description:
|
||||
|
@ -42,7 +42,7 @@ properties:
|
||||
|
||||
resets:
|
||||
description: Reset controller to reset the TPM
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
description: Output GPIO pin to reset the TPM
|
||||
|
@ -55,9 +55,12 @@ properties:
|
||||
|
||||
samsung,sysreg:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
description: Should be phandle/offset pair. The phandle to the syscon node
|
||||
which indicates the FSYSx sysreg interface and the offset of
|
||||
the control register for UFS io coherency setting.
|
||||
items:
|
||||
- items:
|
||||
- description: phandle to FSYSx sysreg node
|
||||
- description: offset of the control register for UFS io coherency setting
|
||||
description:
|
||||
Phandle and offset to the FSYSx sysreg for UFS io coherency setting.
|
||||
|
||||
dma-coherent: true
|
||||
|
||||
|
@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Xilinx SuperSpeed DWC3 USB SoC controller
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
|
@ -16,8 +16,9 @@ description:
|
||||
USB 2.0 traffic.
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Michal Simek <michal.simek@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
|
@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Xilinx udc controller
|
||||
|
||||
maintainers:
|
||||
- Piyush Mehta <piyush.mehta@amd.com>
|
||||
- Mubin Sayyed <mubin.sayyed@amd.com>
|
||||
- Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
|
@ -16,13 +16,13 @@
|
||||
# that are possible for CORE. So for example if CORE_BELL_A_ADVANCED is 'y',
|
||||
# CORE must be 'y' too.
|
||||
#
|
||||
# * What influences CORE_BELL_A_ADVANCED ?
|
||||
# * What influences CORE_BELL_A_ADVANCED?
|
||||
#
|
||||
# As the name implies CORE_BELL_A_ADVANCED is an advanced feature of
|
||||
# CORE_BELL_A so naturally it depends on CORE_BELL_A. So if CORE_BELL_A is 'y'
|
||||
# we know CORE_BELL_A_ADVANCED can be 'y' too.
|
||||
#
|
||||
# * What influences CORE_BELL_A ?
|
||||
# * What influences CORE_BELL_A?
|
||||
#
|
||||
# CORE_BELL_A depends on CORE, so CORE influences CORE_BELL_A.
|
||||
#
|
||||
@ -34,7 +34,7 @@
|
||||
# the "recursive dependency detected" error.
|
||||
#
|
||||
# Reading the Documentation/kbuild/Kconfig.recursion-issue-01 file it may be
|
||||
# obvious that an easy to solution to this problem should just be the removal
|
||||
# obvious that an easy solution to this problem should just be the removal
|
||||
# of the "select CORE" from CORE_BELL_A_ADVANCED as that is implicit already
|
||||
# since CORE_BELL_A depends on CORE. Recursive dependency issues are not always
|
||||
# so trivial to resolve, we provide another example below of practical
|
||||
|
@ -384,8 +384,6 @@ operations:
|
||||
- type
|
||||
|
||||
dump:
|
||||
pre: dpll-lock-dumpit
|
||||
post: dpll-unlock-dumpit
|
||||
reply: *dev-attrs
|
||||
|
||||
-
|
||||
@ -473,8 +471,6 @@ operations:
|
||||
- fractional-frequency-offset
|
||||
|
||||
dump:
|
||||
pre: dpll-lock-dumpit
|
||||
post: dpll-unlock-dumpit
|
||||
request:
|
||||
attributes:
|
||||
- id
|
||||
|
@ -126,7 +126,7 @@ Users may also set the RoCE capability of the function using
|
||||
`devlink port function set roce` command.
|
||||
|
||||
Users may also set the function as migratable using
|
||||
'devlink port function set migratable' command.
|
||||
`devlink port function set migratable` command.
|
||||
|
||||
Users may also set the IPsec crypto capability of the function using
|
||||
`devlink port function set ipsec_crypto` command.
|
||||
|
@ -136,8 +136,8 @@ struct_netpoll_info* npinfo -
|
||||
possible_net_t nd_net - read_mostly (dev_net)napi_busy_loop,tcp_v(4/6)_rcv,ip(v6)_rcv,ip(6)_input,ip(6)_input_finish
|
||||
void* ml_priv
|
||||
enum_netdev_ml_priv_type ml_priv_type
|
||||
struct_pcpu_lstats__percpu* lstats
|
||||
struct_pcpu_sw_netstats__percpu* tstats
|
||||
struct_pcpu_lstats__percpu* lstats read_mostly dev_lstats_add()
|
||||
struct_pcpu_sw_netstats__percpu* tstats read_mostly dev_sw_netstats_tx_add()
|
||||
struct_pcpu_dstats__percpu* dstats
|
||||
struct_garp_port* garp_port
|
||||
struct_mrp_port* mrp_port
|
||||
|
@ -38,13 +38,13 @@ u32 max_window read_mostly -
|
||||
u32 mss_cache read_mostly read_mostly tcp_rate_check_app_limited,tcp_current_mss,tcp_sync_mss,tcp_sndbuf_expand,tcp_tso_should_defer(tx);tcp_update_pacing_rate,tcp_clean_rtx_queue(rx)
|
||||
u32 window_clamp read_mostly read_write tcp_rcv_space_adjust,__tcp_select_window
|
||||
u32 rcv_ssthresh read_mostly - __tcp_select_window
|
||||
u82 scaling_ratio
|
||||
u8 scaling_ratio read_mostly read_mostly tcp_win_from_space
|
||||
struct tcp_rack
|
||||
u16 advmss - read_mostly tcp_rcv_space_adjust
|
||||
u8 compressed_ack
|
||||
u8:2 dup_ack_counter
|
||||
u8:1 tlp_retrans
|
||||
u8:1 tcp_usec_ts
|
||||
u8:1 tcp_usec_ts read_mostly read_mostly
|
||||
u32 chrono_start read_write - tcp_chrono_start/stop(tcp_write_xmit,tcp_cwnd_validate,tcp_send_syn_data)
|
||||
u32[3] chrono_stat read_write - tcp_chrono_start/stop(tcp_write_xmit,tcp_cwnd_validate,tcp_send_syn_data)
|
||||
u8:2 chrono_type read_write - tcp_chrono_start/stop(tcp_write_xmit,tcp_cwnd_validate,tcp_send_syn_data)
|
||||
|
121
Documentation/process/cve.rst
Normal file
121
Documentation/process/cve.rst
Normal file
@ -0,0 +1,121 @@
|
||||
====
|
||||
CVEs
|
||||
====
|
||||
|
||||
Common Vulnerabilities and Exposure (CVE®) numbers were developed as an
|
||||
unambiguous way to identify, define, and catalog publicly disclosed
|
||||
security vulnerabilities. Over time, their usefulness has declined with
|
||||
regards to the kernel project, and CVE numbers were very often assigned
|
||||
in inappropriate ways and for inappropriate reasons. Because of this,
|
||||
the kernel development community has tended to avoid them. However, the
|
||||
combination of continuing pressure to assign CVEs and other forms of
|
||||
security identifiers, and ongoing abuses by individuals and companies
|
||||
outside of the kernel community has made it clear that the kernel
|
||||
community should have control over those assignments.
|
||||
|
||||
The Linux kernel developer team does have the ability to assign CVEs for
|
||||
potential Linux kernel security issues. This assignment is independent
|
||||
of the :doc:`normal Linux kernel security bug reporting
|
||||
process<../process/security-bugs>`.
|
||||
|
||||
A list of all assigned CVEs for the Linux kernel can be found in the
|
||||
archives of the linux-cve mailing list, as seen on
|
||||
https://lore.kernel.org/linux-cve-announce/. To get notice of the
|
||||
assigned CVEs, please `subscribe
|
||||
<https://subspace.kernel.org/subscribing.html>`_ to that mailing list.
|
||||
|
||||
Process
|
||||
=======
|
||||
|
||||
As part of the normal stable release process, kernel changes that are
|
||||
potentially security issues are identified by the developers responsible
|
||||
for CVE number assignments and have CVE numbers automatically assigned
|
||||
to them. These assignments are published on the linux-cve-announce
|
||||
mailing list as announcements on a frequent basis.
|
||||
|
||||
Note, due to the layer at which the Linux kernel is in a system, almost
|
||||
any bug might be exploitable to compromise the security of the kernel,
|
||||
but the possibility of exploitation is often not evident when the bug is
|
||||
fixed. Because of this, the CVE assignment team is overly cautious and
|
||||
assign CVE numbers to any bugfix that they identify. This
|
||||
explains the seemingly large number of CVEs that are issued by the Linux
|
||||
kernel team.
|
||||
|
||||
If the CVE assignment team misses a specific fix that any user feels
|
||||
should have a CVE assigned to it, please email them at <cve@kernel.org>
|
||||
and the team there will work with you on it. Note that no potential
|
||||
security issues should be sent to this alias, it is ONLY for assignment
|
||||
of CVEs for fixes that are already in released kernel trees. If you
|
||||
feel you have found an unfixed security issue, please follow the
|
||||
:doc:`normal Linux kernel security bug reporting
|
||||
process<../process/security-bugs>`.
|
||||
|
||||
No CVEs will be automatically assigned for unfixed security issues in
|
||||
the Linux kernel; assignment will only automatically happen after a fix
|
||||
is available and applied to a stable kernel tree, and it will be tracked
|
||||
that way by the git commit id of the original fix. If anyone wishes to
|
||||
have a CVE assigned before an issue is resolved with a commit, please
|
||||
contact the kernel CVE assignment team at <cve@kernel.org> to get an
|
||||
identifier assigned from their batch of reserved identifiers.
|
||||
|
||||
No CVEs will be assigned for any issue found in a version of the kernel
|
||||
that is not currently being actively supported by the Stable/LTS kernel
|
||||
team. A list of the currently supported kernel branches can be found at
|
||||
https://kernel.org/releases.html
|
||||
|
||||
Disputes of assigned CVEs
|
||||
=========================
|
||||
|
||||
The authority to dispute or modify an assigned CVE for a specific kernel
|
||||
change lies solely with the maintainers of the relevant subsystem
|
||||
affected. This principle ensures a high degree of accuracy and
|
||||
accountability in vulnerability reporting. Only those individuals with
|
||||
deep expertise and intimate knowledge of the subsystem can effectively
|
||||
assess the validity and scope of a reported vulnerability and determine
|
||||
its appropriate CVE designation. Any attempt to modify or dispute a CVE
|
||||
outside of this designated authority could lead to confusion, inaccurate
|
||||
reporting, and ultimately, compromised systems.
|
||||
|
||||
Invalid CVEs
|
||||
============
|
||||
|
||||
If a security issue is found in a Linux kernel that is only supported by
|
||||
a Linux distribution due to the changes that have been made by that
|
||||
distribution, or due to the distribution supporting a kernel version
|
||||
that is no longer one of the kernel.org supported releases, then a CVE
|
||||
can not be assigned by the Linux kernel CVE team, and must be asked for
|
||||
from that Linux distribution itself.
|
||||
|
||||
Any CVE that is assigned against the Linux kernel for an actively
|
||||
supported kernel version, by any group other than the kernel assignment
|
||||
CVE team should not be treated as a valid CVE. Please notify the
|
||||
kernel CVE assignment team at <cve@kernel.org> so that they can work to
|
||||
invalidate such entries through the CNA remediation process.
|
||||
|
||||
Applicability of specific CVEs
|
||||
==============================
|
||||
|
||||
As the Linux kernel can be used in many different ways, with many
|
||||
different ways of accessing it by external users, or no access at all,
|
||||
the applicability of any specific CVE is up to the user of Linux to
|
||||
determine, it is not up to the CVE assignment team. Please do not
|
||||
contact us to attempt to determine the applicability of any specific
|
||||
CVE.
|
||||
|
||||
Also, as the source tree is so large, and any one system only uses a
|
||||
small subset of the source tree, any users of Linux should be aware that
|
||||
large numbers of assigned CVEs are not relevant for their systems.
|
||||
|
||||
In short, we do not know your use case, and we do not know what portions
|
||||
of the kernel that you use, so there is no way for us to determine if a
|
||||
specific CVE is relevant for your system.
|
||||
|
||||
As always, it is best to take all released kernel changes, as they are
|
||||
tested together in a unified whole by many community members, and not as
|
||||
individual cherry-picked changes. Also note that for many bugs, the
|
||||
solution to the overall problem is not found in a single change, but by
|
||||
the sum of many fixes on top of each other. Ideally CVEs will be
|
||||
assigned to all fixes for all issues, but sometimes we will fail to
|
||||
notice fixes, therefore assume that some changes without a CVE assigned
|
||||
might be relevant to take.
|
||||
|
@ -81,6 +81,7 @@ of special classes of bugs: regressions and security problems.
|
||||
|
||||
handling-regressions
|
||||
security-bugs
|
||||
cve
|
||||
embargoed-hardware-issues
|
||||
|
||||
Maintainer information
|
||||
|
@ -99,9 +99,8 @@ CVE assignment
|
||||
The security team does not assign CVEs, nor do we require them for
|
||||
reports or fixes, as this can needlessly complicate the process and may
|
||||
delay the bug handling. If a reporter wishes to have a CVE identifier
|
||||
assigned, they should find one by themselves, for example by contacting
|
||||
MITRE directly. However under no circumstances will a patch inclusion
|
||||
be delayed to wait for a CVE identifier to arrive.
|
||||
assigned for a confirmed issue, they can contact the :doc:`kernel CVE
|
||||
assignment team<../process/cve>` to obtain one.
|
||||
|
||||
Non-disclosure agreements
|
||||
-------------------------
|
||||
|
@ -109,7 +109,7 @@ class KernelFeat(Directive):
|
||||
else:
|
||||
out_lines += line + "\n"
|
||||
|
||||
nodeList = self.nestedParse(out_lines, fname)
|
||||
nodeList = self.nestedParse(out_lines, self.arguments[0])
|
||||
return nodeList
|
||||
|
||||
def nestedParse(self, lines, fname):
|
||||
|
33
MAINTAINERS
33
MAINTAINERS
@ -4169,14 +4169,14 @@ F: drivers/firmware/broadcom/tee_bnxt_fw.c
|
||||
F: drivers/net/ethernet/broadcom/bnxt/
|
||||
F: include/linux/firmware/broadcom/tee_bnxt_fw.h
|
||||
|
||||
BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
|
||||
M: Arend van Spriel <aspriel@gmail.com>
|
||||
M: Franky Lin <franky.lin@broadcom.com>
|
||||
M: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
BROADCOM BRCM80211 IEEE802.11 WIRELESS DRIVERS
|
||||
M: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: brcm80211@lists.linux.dev
|
||||
L: brcm80211-dev-list.pdl@broadcom.com
|
||||
S: Supported
|
||||
F: drivers/net/wireless/broadcom/brcm80211/
|
||||
F: include/linux/platform_data/brcmfmac.h
|
||||
|
||||
BROADCOM BRCMSTB GPIO DRIVER
|
||||
M: Doug Berger <opendmb@gmail.com>
|
||||
@ -5610,6 +5610,11 @@ S: Maintained
|
||||
F: Documentation/devicetree/bindings/net/can/ctu,ctucanfd.yaml
|
||||
F: drivers/net/can/ctucanfd/
|
||||
|
||||
CVE ASSIGNMENT CONTACT
|
||||
M: CVE Assignment Team <cve@kernel.org>
|
||||
S: Maintained
|
||||
F: Documentation/process/cve.rst
|
||||
|
||||
CW1200 WLAN driver
|
||||
S: Orphan
|
||||
F: drivers/net/wireless/st/cw1200/
|
||||
@ -10801,11 +10806,11 @@ F: drivers/gpio/gpio-tangier.h
|
||||
|
||||
INTEL GVT-g DRIVERS (Intel GPU Virtualization)
|
||||
M: Zhenyu Wang <zhenyuw@linux.intel.com>
|
||||
M: Zhi Wang <zhi.a.wang@intel.com>
|
||||
M: Zhi Wang <zhi.wang.linux@gmail.com>
|
||||
L: intel-gvt-dev@lists.freedesktop.org
|
||||
L: intel-gfx@lists.freedesktop.org
|
||||
S: Supported
|
||||
W: https://01.org/igvt-g
|
||||
W: https://github.com/intel/gvt-linux/wiki
|
||||
T: git https://github.com/intel/gvt-linux.git
|
||||
F: drivers/gpu/drm/i915/gvt/
|
||||
|
||||
@ -11127,7 +11132,6 @@ S: Supported
|
||||
F: drivers/net/wireless/intel/iwlegacy/
|
||||
|
||||
INTEL WIRELESS WIFI LINK (iwlwifi)
|
||||
M: Gregory Greenman <gregory.greenman@intel.com>
|
||||
M: Miri Korenblit <miriam.rachel.korenblit@intel.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
@ -15325,7 +15329,7 @@ K: \bmdo_
|
||||
NETWORKING [MPTCP]
|
||||
M: Matthieu Baerts <matttbe@kernel.org>
|
||||
M: Mat Martineau <martineau@kernel.org>
|
||||
R: Geliang Tang <geliang.tang@linux.dev>
|
||||
R: Geliang Tang <geliang@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
L: mptcp@lists.linux.dev
|
||||
S: Maintained
|
||||
@ -16838,6 +16842,7 @@ F: drivers/pci/controller/dwc/*designware*
|
||||
|
||||
PCI DRIVER FOR TI DRA7XX/J721E
|
||||
M: Vignesh Raghavendra <vigneshr@ti.com>
|
||||
R: Siddharth Vadapalli <s-vadapalli@ti.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
L: linux-pci@vger.kernel.org
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
@ -17183,7 +17188,7 @@ R: John Garry <john.g.garry@oracle.com>
|
||||
R: Will Deacon <will@kernel.org>
|
||||
R: James Clark <james.clark@arm.com>
|
||||
R: Mike Leach <mike.leach@linaro.org>
|
||||
R: Leo Yan <leo.yan@linaro.org>
|
||||
R: Leo Yan <leo.yan@linux.dev>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: tools/build/feature/test-libopencsd.c
|
||||
@ -18432,7 +18437,7 @@ S: Supported
|
||||
F: drivers/infiniband/sw/rdmavt
|
||||
|
||||
RDS - RELIABLE DATAGRAM SOCKETS
|
||||
M: Santosh Shilimkar <santosh.shilimkar@oracle.com>
|
||||
M: Allison Henderson <allison.henderson@oracle.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: linux-rdma@vger.kernel.org
|
||||
L: rds-devel@oss.oracle.com (moderated for non-subscribers)
|
||||
@ -22010,6 +22015,14 @@ F: Documentation/devicetree/bindings/media/i2c/ti,ds90*
|
||||
F: drivers/media/i2c/ds90*
|
||||
F: include/media/i2c/ds90*
|
||||
|
||||
TI HDC302X HUMIDITY DRIVER
|
||||
M: Javier Carrasco <javier.carrasco.cruz@gmail.com>
|
||||
M: Li peiyu <579lpy@gmail.com>
|
||||
L: linux-iio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/iio/humidity/ti,hdc3020.yaml
|
||||
F: drivers/iio/humidity/hdc3020.c
|
||||
|
||||
TI ICSSG ETHERNET DRIVER (ICSSG)
|
||||
R: MD Danish Anwar <danishanwar@ti.com>
|
||||
R: Roger Quadros <rogerq@kernel.org>
|
||||
|
14
Makefile
14
Makefile
@ -2,7 +2,7 @@
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 8
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc3
|
||||
EXTRAVERSION = -rc5
|
||||
NAME = Hurr durr I'ma ninja sloth
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -294,15 +294,15 @@ may-sync-config := 1
|
||||
single-build :=
|
||||
|
||||
ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
|
||||
ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
|
||||
ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
|
||||
need-config :=
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
|
||||
ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
|
||||
ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
|
||||
may-sync-config :=
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
need-compiler := $(may-sync-config)
|
||||
@ -323,9 +323,9 @@ endif
|
||||
# We cannot build single targets and the others at the same time
|
||||
ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
|
||||
single-build := 1
|
||||
ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
|
||||
ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
|
||||
mixed-build := 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# For "make -j clean all", "make -j mrproper defconfig all", etc.
|
||||
|
@ -31,7 +31,7 @@
|
||||
static __always_inline bool arch_static_branch(struct static_key *key,
|
||||
bool branch)
|
||||
{
|
||||
asm_volatile_goto(".balign "__stringify(JUMP_LABEL_NOP_SIZE)" \n"
|
||||
asm goto(".balign "__stringify(JUMP_LABEL_NOP_SIZE)" \n"
|
||||
"1: \n"
|
||||
"nop \n"
|
||||
".pushsection __jump_table, \"aw\" \n"
|
||||
@ -47,7 +47,7 @@ l_yes:
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key,
|
||||
bool branch)
|
||||
{
|
||||
asm_volatile_goto(".balign "__stringify(JUMP_LABEL_NOP_SIZE)" \n"
|
||||
asm goto(".balign "__stringify(JUMP_LABEL_NOP_SIZE)" \n"
|
||||
"1: \n"
|
||||
"b %l[l_yes] \n"
|
||||
".pushsection __jump_table, \"aw\" \n"
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
WASM(nop) "\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".word 1b, %l[l_yes], %c0\n\t"
|
||||
@ -25,7 +25,7 @@ l_yes:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
WASM(b) " %l[l_yes]\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".word 1b, %l[l_yes], %c0\n\t"
|
||||
|
@ -298,6 +298,8 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||
goto done;
|
||||
}
|
||||
count_vm_vma_lock_event(VMA_LOCK_RETRY);
|
||||
if (fault & VM_FAULT_MAJOR)
|
||||
flags |= FAULT_FLAG_TRIED;
|
||||
|
||||
/* Quick path to respond to signals */
|
||||
if (fault_signal_pending(fault, regs)) {
|
||||
|
@ -229,7 +229,7 @@ alternative_has_cap_likely(const unsigned long cpucap)
|
||||
if (!cpucap_is_possible(cpucap))
|
||||
return false;
|
||||
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
ALTERNATIVE_CB("b %l[l_no]", %[cpucap], alt_cb_patch_nops)
|
||||
:
|
||||
: [cpucap] "i" (cpucap)
|
||||
@ -247,7 +247,7 @@ alternative_has_cap_unlikely(const unsigned long cpucap)
|
||||
if (!cpucap_is_possible(cpucap))
|
||||
return false;
|
||||
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
ALTERNATIVE("nop", "b %l[l_yes]", %[cpucap])
|
||||
:
|
||||
: [cpucap] "i" (cpucap)
|
||||
|
@ -83,7 +83,7 @@ struct arm64_ftr_bits {
|
||||
* to full-0 denotes that this field has no override
|
||||
*
|
||||
* A @mask field set to full-0 with the corresponding @val field set
|
||||
* to full-1 denotes thath this field has an invalid override.
|
||||
* to full-1 denotes that this field has an invalid override.
|
||||
*/
|
||||
struct arm64_ftr_override {
|
||||
u64 val;
|
||||
|
@ -61,6 +61,7 @@
|
||||
#define ARM_CPU_IMP_HISI 0x48
|
||||
#define ARM_CPU_IMP_APPLE 0x61
|
||||
#define ARM_CPU_IMP_AMPERE 0xC0
|
||||
#define ARM_CPU_IMP_MICROSOFT 0x6D
|
||||
|
||||
#define ARM_CPU_PART_AEM_V8 0xD0F
|
||||
#define ARM_CPU_PART_FOUNDATION 0xD00
|
||||
@ -135,6 +136,8 @@
|
||||
|
||||
#define AMPERE_CPU_PART_AMPERE1 0xAC3
|
||||
|
||||
#define MICROSOFT_CPU_PART_AZURE_COBALT_100 0xD49 /* Based on r0p0 of ARM Neoverse N2 */
|
||||
|
||||
#define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
|
||||
#define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
|
||||
#define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
|
||||
@ -193,6 +196,7 @@
|
||||
#define MIDR_APPLE_M2_BLIZZARD_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M2_BLIZZARD_MAX)
|
||||
#define MIDR_APPLE_M2_AVALANCHE_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M2_AVALANCHE_MAX)
|
||||
#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1)
|
||||
#define MIDR_MICROSOFT_AZURE_COBALT_100 MIDR_CPU_MODEL(ARM_CPU_IMP_MICROSOFT, MICROSOFT_CPU_PART_AZURE_COBALT_100)
|
||||
|
||||
/* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */
|
||||
#define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX
|
||||
|
@ -62,13 +62,13 @@ static inline void cpacr_restore(unsigned long cpacr)
|
||||
* When we defined the maximum SVE vector length we defined the ABI so
|
||||
* that the maximum vector length included all the reserved for future
|
||||
* expansion bits in ZCR rather than those just currently defined by
|
||||
* the architecture. While SME follows a similar pattern the fact that
|
||||
* it includes a square matrix means that any allocations that attempt
|
||||
* to cover the maximum potential vector length (such as happen with
|
||||
* the regset used for ptrace) end up being extremely large. Define
|
||||
* the much lower actual limit for use in such situations.
|
||||
* the architecture. Using this length to allocate worst size buffers
|
||||
* results in excessively large allocations, and this effect is even
|
||||
* more pronounced for SME due to ZA. Define more suitable VLs for
|
||||
* these situations.
|
||||
*/
|
||||
#define SME_VQ_MAX 16
|
||||
#define ARCH_SVE_VQ_MAX ((ZCR_ELx_LEN_MASK >> ZCR_ELx_LEN_SHIFT) + 1)
|
||||
#define SME_VQ_MAX ((SMCR_ELx_LEN_MASK >> SMCR_ELx_LEN_SHIFT) + 1)
|
||||
|
||||
struct task_struct;
|
||||
|
||||
|
@ -15,17 +15,21 @@
|
||||
|
||||
#define JUMP_LABEL_NOP_SIZE AARCH64_INSN_SIZE
|
||||
|
||||
/*
|
||||
* Prefer the constraint "S" to support PIC with GCC. Clang before 19 does not
|
||||
* support "S" on a symbol with a constant offset, so we use "i" as a fallback.
|
||||
*/
|
||||
static __always_inline bool arch_static_branch(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: nop \n\t"
|
||||
" .pushsection __jump_table, \"aw\" \n\t"
|
||||
" .align 3 \n\t"
|
||||
" .long 1b - ., %l[l_yes] - . \n\t"
|
||||
" .quad %c0 - . \n\t"
|
||||
" .quad (%[key] - .) + %[bit0] \n\t"
|
||||
" .popsection \n\t"
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
: : [key]"Si"(key), [bit0]"i"(branch) : : l_yes);
|
||||
|
||||
return false;
|
||||
l_yes:
|
||||
@ -35,14 +39,14 @@ l_yes:
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: b %l[l_yes] \n\t"
|
||||
" .pushsection __jump_table, \"aw\" \n\t"
|
||||
" .align 3 \n\t"
|
||||
" .long 1b - ., %l[l_yes] - . \n\t"
|
||||
" .quad %c0 - . \n\t"
|
||||
" .quad (%[key] - .) + %[bit0] \n\t"
|
||||
" .popsection \n\t"
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
: : [key]"Si"(key), [bit0]"i"(branch) : : l_yes);
|
||||
|
||||
return false;
|
||||
l_yes:
|
||||
|
@ -374,6 +374,7 @@ static const struct midr_range erratum_1463225[] = {
|
||||
static const struct midr_range trbe_overwrite_fill_mode_cpus[] = {
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2139208
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
|
||||
MIDR_ALL_VERSIONS(MIDR_MICROSOFT_AZURE_COBALT_100),
|
||||
#endif
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2119858
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),
|
||||
@ -387,6 +388,7 @@ static const struct midr_range trbe_overwrite_fill_mode_cpus[] = {
|
||||
static const struct midr_range tsb_flush_fail_cpus[] = {
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2067961
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
|
||||
MIDR_ALL_VERSIONS(MIDR_MICROSOFT_AZURE_COBALT_100),
|
||||
#endif
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2054223
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),
|
||||
@ -399,6 +401,7 @@ static const struct midr_range tsb_flush_fail_cpus[] = {
|
||||
static struct midr_range trbe_write_out_of_range_cpus[] = {
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2253138
|
||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
|
||||
MIDR_ALL_VERSIONS(MIDR_MICROSOFT_AZURE_COBALT_100),
|
||||
#endif
|
||||
#ifdef CONFIG_ARM64_ERRATUM_2224489
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),
|
||||
|
@ -1635,7 +1635,7 @@ void fpsimd_preserve_current_state(void)
|
||||
void fpsimd_signal_preserve_current_state(void)
|
||||
{
|
||||
fpsimd_preserve_current_state();
|
||||
if (test_thread_flag(TIF_SVE))
|
||||
if (current->thread.fp_type == FP_STATE_SVE)
|
||||
sve_to_fpsimd(current);
|
||||
}
|
||||
|
||||
|
@ -1500,7 +1500,8 @@ static const struct user_regset aarch64_regsets[] = {
|
||||
#ifdef CONFIG_ARM64_SVE
|
||||
[REGSET_SVE] = { /* Scalable Vector Extension */
|
||||
.core_note_type = NT_ARM_SVE,
|
||||
.n = DIV_ROUND_UP(SVE_PT_SIZE(SVE_VQ_MAX, SVE_PT_REGS_SVE),
|
||||
.n = DIV_ROUND_UP(SVE_PT_SIZE(ARCH_SVE_VQ_MAX,
|
||||
SVE_PT_REGS_SVE),
|
||||
SVE_VQ_BYTES),
|
||||
.size = SVE_VQ_BYTES,
|
||||
.align = SVE_VQ_BYTES,
|
||||
|
@ -242,7 +242,7 @@ static int preserve_sve_context(struct sve_context __user *ctx)
|
||||
vl = task_get_sme_vl(current);
|
||||
vq = sve_vq_from_vl(vl);
|
||||
flags |= SVE_SIG_FLAG_SM;
|
||||
} else if (test_thread_flag(TIF_SVE)) {
|
||||
} else if (current->thread.fp_type == FP_STATE_SVE) {
|
||||
vq = sve_vq_from_vl(vl);
|
||||
}
|
||||
|
||||
@ -878,7 +878,7 @@ static int setup_sigframe_layout(struct rt_sigframe_user_layout *user,
|
||||
if (system_supports_sve() || system_supports_sme()) {
|
||||
unsigned int vq = 0;
|
||||
|
||||
if (add_all || test_thread_flag(TIF_SVE) ||
|
||||
if (add_all || current->thread.fp_type == FP_STATE_SVE ||
|
||||
thread_sm_enabled(¤t->thread)) {
|
||||
int vl = max(sve_max_vl(), sme_max_vl());
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
# KVM configuration
|
||||
#
|
||||
|
||||
source "virt/lib/Kconfig"
|
||||
source "virt/kvm/Kconfig"
|
||||
|
||||
menuconfig VIRTUALIZATION
|
||||
|
@ -1419,7 +1419,6 @@ kvm_pte_t *kvm_pgtable_stage2_create_unlinked(struct kvm_pgtable *pgt,
|
||||
level + 1);
|
||||
if (ret) {
|
||||
kvm_pgtable_stage2_free_unlinked(mm_ops, pgtable, level);
|
||||
mm_ops->put_page(pgtable);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
@ -1502,7 +1501,6 @@ static int stage2_split_walker(const struct kvm_pgtable_visit_ctx *ctx,
|
||||
|
||||
if (!stage2_try_break_pte(ctx, mmu)) {
|
||||
kvm_pgtable_stage2_free_unlinked(mm_ops, childp, level);
|
||||
mm_ops->put_page(childp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
@ -101,6 +101,17 @@ void __init kvm_hyp_reserve(void)
|
||||
hyp_mem_base);
|
||||
}
|
||||
|
||||
static void __pkvm_destroy_hyp_vm(struct kvm *host_kvm)
|
||||
{
|
||||
if (host_kvm->arch.pkvm.handle) {
|
||||
WARN_ON(kvm_call_hyp_nvhe(__pkvm_teardown_vm,
|
||||
host_kvm->arch.pkvm.handle));
|
||||
}
|
||||
|
||||
host_kvm->arch.pkvm.handle = 0;
|
||||
free_hyp_memcache(&host_kvm->arch.pkvm.teardown_mc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocates and donates memory for hypervisor VM structs at EL2.
|
||||
*
|
||||
@ -181,7 +192,7 @@ static int __pkvm_create_hyp_vm(struct kvm *host_kvm)
|
||||
return 0;
|
||||
|
||||
destroy_vm:
|
||||
pkvm_destroy_hyp_vm(host_kvm);
|
||||
__pkvm_destroy_hyp_vm(host_kvm);
|
||||
return ret;
|
||||
free_vm:
|
||||
free_pages_exact(hyp_vm, hyp_vm_sz);
|
||||
@ -194,23 +205,19 @@ int pkvm_create_hyp_vm(struct kvm *host_kvm)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&host_kvm->lock);
|
||||
mutex_lock(&host_kvm->arch.config_lock);
|
||||
if (!host_kvm->arch.pkvm.handle)
|
||||
ret = __pkvm_create_hyp_vm(host_kvm);
|
||||
mutex_unlock(&host_kvm->lock);
|
||||
mutex_unlock(&host_kvm->arch.config_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void pkvm_destroy_hyp_vm(struct kvm *host_kvm)
|
||||
{
|
||||
if (host_kvm->arch.pkvm.handle) {
|
||||
WARN_ON(kvm_call_hyp_nvhe(__pkvm_teardown_vm,
|
||||
host_kvm->arch.pkvm.handle));
|
||||
}
|
||||
|
||||
host_kvm->arch.pkvm.handle = 0;
|
||||
free_hyp_memcache(&host_kvm->arch.pkvm.teardown_mc);
|
||||
mutex_lock(&host_kvm->arch.config_lock);
|
||||
__pkvm_destroy_hyp_vm(host_kvm);
|
||||
mutex_unlock(&host_kvm->arch.config_lock);
|
||||
}
|
||||
|
||||
int pkvm_init_host_vm(struct kvm *host_kvm)
|
||||
|
@ -12,7 +12,7 @@
|
||||
static __always_inline bool arch_static_branch(struct static_key *key,
|
||||
bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: nop32 \n"
|
||||
" .pushsection __jump_table, \"aw\" \n"
|
||||
" .align 2 \n"
|
||||
@ -29,7 +29,7 @@ label:
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key,
|
||||
bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: bsr32 %l[label] \n"
|
||||
" .pushsection __jump_table, \"aw\" \n"
|
||||
" .align 2 \n"
|
||||
|
@ -12,6 +12,7 @@ config LOONGARCH
|
||||
select ARCH_DISABLE_KASAN_INLINE
|
||||
select ARCH_ENABLE_MEMORY_HOTPLUG
|
||||
select ARCH_ENABLE_MEMORY_HOTREMOVE
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
|
||||
select ARCH_HAS_CPU_FINALIZE_INIT
|
||||
select ARCH_HAS_FORTIFY_SOURCE
|
||||
@ -99,6 +100,7 @@ config LOONGARCH
|
||||
select HAVE_ARCH_KFENCE
|
||||
select HAVE_ARCH_KGDB if PERF_EVENTS
|
||||
select HAVE_ARCH_MMAP_RND_BITS if MMU
|
||||
select HAVE_ARCH_SECCOMP
|
||||
select HAVE_ARCH_SECCOMP_FILTER
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
select HAVE_ARCH_TRANSPARENT_HUGEPAGE
|
||||
@ -632,23 +634,6 @@ config RANDOMIZE_BASE_MAX_OFFSET
|
||||
|
||||
This is limited by the size of the lower address memory, 256MB.
|
||||
|
||||
config SECCOMP
|
||||
bool "Enable seccomp to safely compute untrusted bytecode"
|
||||
depends on PROC_FS
|
||||
default y
|
||||
help
|
||||
This kernel feature is useful for number crunching applications
|
||||
that may need to compute untrusted bytecode during their
|
||||
execution. By using pipes or other transports made available to
|
||||
the process as file descriptors supporting the read/write
|
||||
syscalls, it's possible to isolate those applications in
|
||||
their own address space using seccomp. Once seccomp is
|
||||
enabled via /proc/<pid>/seccomp, it cannot be disabled
|
||||
and the task is only allowed to execute a few safe syscalls
|
||||
defined by each seccomp mode.
|
||||
|
||||
If unsure, say Y. Only embedded should say N here.
|
||||
|
||||
endmenu
|
||||
|
||||
config ARCH_SELECT_MEMORY_MODEL
|
||||
@ -667,10 +652,6 @@ config ARCH_SPARSEMEM_ENABLE
|
||||
or have huge holes in the physical address space for other reasons.
|
||||
See <file:Documentation/mm/numa.rst> for more.
|
||||
|
||||
config ARCH_ENABLE_THP_MIGRATION
|
||||
def_bool y
|
||||
depends on TRANSPARENT_HUGEPAGE
|
||||
|
||||
config ARCH_MEMORY_PROBE
|
||||
def_bool y
|
||||
depends on MEMORY_HOTPLUG
|
||||
|
@ -32,8 +32,10 @@ static inline bool acpi_has_cpu_in_madt(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
#define MAX_CORE_PIC 256
|
||||
|
||||
extern struct list_head acpi_wakeup_device_list;
|
||||
extern struct acpi_madt_core_pic acpi_core_pic[NR_CPUS];
|
||||
extern struct acpi_madt_core_pic acpi_core_pic[MAX_CORE_PIC];
|
||||
|
||||
extern int __init parse_acpi_topology(void);
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key * const key, const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: nop \n\t"
|
||||
JUMP_TABLE_ENTRY
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
@ -35,7 +35,7 @@ l_yes:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key * const key, const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: b %l[l_yes] \n\t"
|
||||
JUMP_TABLE_ENTRY
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
|
@ -29,11 +29,9 @@ int disabled_cpus;
|
||||
|
||||
u64 acpi_saved_sp;
|
||||
|
||||
#define MAX_CORE_PIC 256
|
||||
|
||||
#define PREFIX "ACPI: "
|
||||
|
||||
struct acpi_madt_core_pic acpi_core_pic[NR_CPUS];
|
||||
struct acpi_madt_core_pic acpi_core_pic[MAX_CORE_PIC];
|
||||
|
||||
void __init __iomem * __acpi_map_table(unsigned long phys, unsigned long size)
|
||||
{
|
||||
|
@ -44,6 +44,9 @@ void *kasan_mem_to_shadow(const void *addr)
|
||||
unsigned long xrange = (maddr >> XRANGE_SHIFT) & 0xffff;
|
||||
unsigned long offset = 0;
|
||||
|
||||
if (maddr >= FIXADDR_START)
|
||||
return (void *)(kasan_early_shadow_page);
|
||||
|
||||
maddr &= XRANGE_SHADOW_MASK;
|
||||
switch (xrange) {
|
||||
case XKPRANGE_CC_SEG:
|
||||
|
@ -2,6 +2,7 @@
|
||||
# Objects to go into the VDSO.
|
||||
|
||||
KASAN_SANITIZE := n
|
||||
UBSAN_SANITIZE := n
|
||||
KCOV_INSTRUMENT := n
|
||||
|
||||
# Include the generic Makefile to check the built vdso.
|
||||
|
@ -15,10 +15,10 @@
|
||||
KBUILD_DEFCONFIG := multi_defconfig
|
||||
|
||||
ifdef cross_compiling
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
CROSS_COMPILE := $(call cc-cross-prefix, \
|
||||
m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
|
@ -241,7 +241,8 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
||||
" .set pop"
|
||||
: "=&r" (sum), "=&r" (tmp)
|
||||
: "r" (saddr), "r" (daddr),
|
||||
"0" (htonl(len)), "r" (htonl(proto)), "r" (sum));
|
||||
"0" (htonl(len)), "r" (htonl(proto)), "r" (sum)
|
||||
: "memory");
|
||||
|
||||
return csum_fold(sum);
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ extern void jump_label_apply_nops(struct module *mod);
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\t" B_INSN " 2f\n\t"
|
||||
asm goto("1:\t" B_INSN " 2f\n\t"
|
||||
"2:\t.insn\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
WORD_INSN " 1b, %l[l_yes], %0\n\t"
|
||||
@ -53,7 +53,7 @@ l_yes:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\t" J_INSN " %l[l_yes]\n\t"
|
||||
asm goto("1:\t" J_INSN " %l[l_yes]\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
WORD_INSN " 1b, %l[l_yes], %0\n\t"
|
||||
".popsection\n\t"
|
||||
|
@ -60,6 +60,7 @@ static inline void instruction_pointer_set(struct pt_regs *regs,
|
||||
unsigned long val)
|
||||
{
|
||||
regs->cp0_epc = val;
|
||||
regs->cp0_cause &= ~CAUSEF_BD;
|
||||
}
|
||||
|
||||
/* Query offset/name of register from its name/offset */
|
||||
@ -154,6 +155,8 @@ static inline long regs_return_value(struct pt_regs *regs)
|
||||
}
|
||||
|
||||
#define instruction_pointer(regs) ((regs)->cp0_epc)
|
||||
extern unsigned long exception_ip(struct pt_regs *regs);
|
||||
#define exception_ip(regs) exception_ip(regs)
|
||||
#define profile_pc(regs) instruction_pointer(regs)
|
||||
|
||||
extern asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall);
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <linux/seccomp.h>
|
||||
#include <linux/ftrace.h>
|
||||
|
||||
#include <asm/branch.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/cpu-info.h>
|
||||
@ -48,6 +49,12 @@
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/syscalls.h>
|
||||
|
||||
unsigned long exception_ip(struct pt_regs *regs)
|
||||
{
|
||||
return exception_epc(regs);
|
||||
}
|
||||
EXPORT_SYMBOL(exception_ip);
|
||||
|
||||
/*
|
||||
* Called by kernel/ptrace.c when detaching..
|
||||
*
|
||||
|
@ -50,12 +50,12 @@ export CROSS32CC
|
||||
|
||||
# Set default cross compiler for kernel build
|
||||
ifdef cross_compiling
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
CC_SUFFIXES = linux linux-gnu unknown-linux-gnu suse-linux
|
||||
CROSS_COMPILE := $(call cc-cross-prefix, \
|
||||
$(foreach a,$(CC_ARCHES), \
|
||||
$(foreach s,$(CC_SUFFIXES),$(a)-$(s)-)))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DYNAMIC_FTRACE
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
"nop\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".align %1\n\t"
|
||||
@ -29,7 +29,7 @@ l_yes:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
"b,n %l[l_yes]\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".align %1\n\t"
|
||||
|
@ -20,14 +20,6 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void _mcount(void);
|
||||
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY))
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip,
|
||||
unsigned long sp);
|
||||
|
||||
@ -142,8 +134,10 @@ static inline u8 this_cpu_get_ftrace_enabled(void) { return 1; }
|
||||
#ifdef CONFIG_FUNCTION_TRACER
|
||||
extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];
|
||||
void ftrace_free_init_tramp(void);
|
||||
unsigned long ftrace_call_adjust(unsigned long addr);
|
||||
#else
|
||||
static inline void ftrace_free_init_tramp(void) { }
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr) { return addr; }
|
||||
#endif
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
"nop # arch_static_branch\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".long 1b - ., %l[l_yes] - .\n\t"
|
||||
@ -32,7 +32,7 @@ l_yes:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("1:\n\t"
|
||||
asm goto("1:\n\t"
|
||||
"b %l[l_yes] # arch_static_branch_jump\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".long 1b - ., %l[l_yes] - .\n\t"
|
||||
|
@ -32,7 +32,7 @@ typedef struct {
|
||||
*/
|
||||
struct papr_sysparm_buf {
|
||||
__be16 len;
|
||||
char val[PAPR_SYSPARM_MAX_OUTPUT];
|
||||
u8 val[PAPR_SYSPARM_MAX_OUTPUT];
|
||||
};
|
||||
|
||||
struct papr_sysparm_buf *papr_sysparm_buf_alloc(void);
|
||||
|
@ -617,6 +617,8 @@
|
||||
#endif
|
||||
#define SPRN_HID2 0x3F8 /* Hardware Implementation Register 2 */
|
||||
#define SPRN_HID2_GEKKO 0x398 /* Gekko HID2 Register */
|
||||
#define SPRN_HID2_G2_LE 0x3F3 /* G2_LE HID2 Register */
|
||||
#define HID2_G2_LE_HBE (1<<18) /* High BAT Enable (G2_LE) */
|
||||
#define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */
|
||||
#define SPRN_IABR2 0x3FA /* 83xx */
|
||||
#define SPRN_IBCR 0x135 /* 83xx Insn Breakpoint Control Reg */
|
||||
|
@ -14,6 +14,7 @@ typedef struct func_desc func_desc_t;
|
||||
|
||||
extern char __head_end[];
|
||||
extern char __srwx_boundary[];
|
||||
extern char __exittext_begin[], __exittext_end[];
|
||||
|
||||
/* Patch sites */
|
||||
extern s32 patch__call_flush_branch_caches1;
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
#if defined(CONFIG_KASAN) && CONFIG_THREAD_SHIFT < 15
|
||||
#define MIN_THREAD_SHIFT (CONFIG_THREAD_SHIFT + 1)
|
||||
#else
|
||||
#define MIN_THREAD_SHIFT CONFIG_THREAD_SHIFT
|
||||
|
@ -74,7 +74,7 @@ __pu_failed: \
|
||||
/* -mprefixed can generate offsets beyond range, fall back hack */
|
||||
#ifdef CONFIG_PPC_KERNEL_PREFIXED
|
||||
#define __put_user_asm_goto(x, addr, label, op) \
|
||||
asm_volatile_goto( \
|
||||
asm goto( \
|
||||
"1: " op " %0,0(%1) # put_user\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
: \
|
||||
@ -83,7 +83,7 @@ __pu_failed: \
|
||||
: label)
|
||||
#else
|
||||
#define __put_user_asm_goto(x, addr, label, op) \
|
||||
asm_volatile_goto( \
|
||||
asm goto( \
|
||||
"1: " op "%U1%X1 %0,%1 # put_user\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
: \
|
||||
@ -97,7 +97,7 @@ __pu_failed: \
|
||||
__put_user_asm_goto(x, ptr, label, "std")
|
||||
#else /* __powerpc64__ */
|
||||
#define __put_user_asm2_goto(x, addr, label) \
|
||||
asm_volatile_goto( \
|
||||
asm goto( \
|
||||
"1: stw%X1 %0, %1\n" \
|
||||
"2: stw%X1 %L0, %L1\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
@ -146,7 +146,7 @@ do { \
|
||||
/* -mprefixed can generate offsets beyond range, fall back hack */
|
||||
#ifdef CONFIG_PPC_KERNEL_PREFIXED
|
||||
#define __get_user_asm_goto(x, addr, label, op) \
|
||||
asm_volatile_goto( \
|
||||
asm_goto_output( \
|
||||
"1: "op" %0,0(%1) # get_user\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
: "=r" (x) \
|
||||
@ -155,7 +155,7 @@ do { \
|
||||
: label)
|
||||
#else
|
||||
#define __get_user_asm_goto(x, addr, label, op) \
|
||||
asm_volatile_goto( \
|
||||
asm_goto_output( \
|
||||
"1: "op"%U1%X1 %0, %1 # get_user\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
: "=r" (x) \
|
||||
@ -169,7 +169,7 @@ do { \
|
||||
__get_user_asm_goto(x, addr, label, "ld")
|
||||
#else /* __powerpc64__ */
|
||||
#define __get_user_asm2_goto(x, addr, label) \
|
||||
asm_volatile_goto( \
|
||||
asm_goto_output( \
|
||||
"1: lwz%X1 %0, %1\n" \
|
||||
"2: lwz%X1 %L0, %L1\n" \
|
||||
EX_TABLE(1b, %l2) \
|
||||
|
@ -14,7 +14,7 @@ enum {
|
||||
struct papr_sysparm_io_block {
|
||||
__u32 parameter;
|
||||
__u16 length;
|
||||
char data[PAPR_SYSPARM_MAX_OUTPUT];
|
||||
__u8 data[PAPR_SYSPARM_MAX_OUTPUT];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -26,6 +26,15 @@ BEGIN_FTR_SECTION
|
||||
bl __init_fpu_registers
|
||||
END_FTR_SECTION_IFCLR(CPU_FTR_FPU_UNAVAILABLE)
|
||||
bl setup_common_caches
|
||||
|
||||
/*
|
||||
* This assumes that all cores using __setup_cpu_603 with
|
||||
* MMU_FTR_USE_HIGH_BATS are G2_LE compatible
|
||||
*/
|
||||
BEGIN_MMU_FTR_SECTION
|
||||
bl setup_g2_le_hid2
|
||||
END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
|
||||
|
||||
mtlr r5
|
||||
blr
|
||||
_GLOBAL(__setup_cpu_604)
|
||||
@ -115,6 +124,16 @@ SYM_FUNC_START_LOCAL(setup_604_hid0)
|
||||
blr
|
||||
SYM_FUNC_END(setup_604_hid0)
|
||||
|
||||
/* Enable high BATs for G2_LE and derivatives like e300cX */
|
||||
SYM_FUNC_START_LOCAL(setup_g2_le_hid2)
|
||||
mfspr r11,SPRN_HID2_G2_LE
|
||||
oris r11,r11,HID2_G2_LE_HBE@h
|
||||
mtspr SPRN_HID2_G2_LE,r11
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
SYM_FUNC_END(setup_g2_le_hid2)
|
||||
|
||||
/* 7400 <= rev 2.7 and 7410 rev = 1.0 suffer from some
|
||||
* erratas we work around here.
|
||||
* Moto MPC710CE.pdf describes them, those are errata
|
||||
@ -495,4 +514,3 @@ _GLOBAL(__restore_cpu_setup)
|
||||
mtcr r7
|
||||
blr
|
||||
_ASM_NOKPROBE_SYMBOL(__restore_cpu_setup)
|
||||
|
||||
|
@ -8,7 +8,8 @@
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
|
||||
PPC_FEATURE_HAS_FPU | PPC_FEATURE_64)
|
||||
PPC_FEATURE_HAS_FPU | PPC_FEATURE_64 | \
|
||||
PPC_FEATURE_BOOKE)
|
||||
#else
|
||||
#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
|
||||
PPC_FEATURE_BOOKE)
|
||||
|
@ -52,7 +52,8 @@ _ASM_NOKPROBE_SYMBOL(system_call_vectored_\name)
|
||||
mr r10,r1
|
||||
ld r1,PACAKSAVE(r13)
|
||||
std r10,0(r1)
|
||||
std r11,_NIP(r1)
|
||||
std r11,_LINK(r1)
|
||||
std r11,_NIP(r1) /* Saved LR is also the next instruction */
|
||||
std r12,_MSR(r1)
|
||||
std r0,GPR0(r1)
|
||||
std r10,GPR1(r1)
|
||||
@ -70,7 +71,6 @@ _ASM_NOKPROBE_SYMBOL(system_call_vectored_\name)
|
||||
std r9,GPR13(r1)
|
||||
SAVE_NVGPRS(r1)
|
||||
std r11,_XER(r1)
|
||||
std r11,_LINK(r1)
|
||||
std r11,_CTR(r1)
|
||||
|
||||
li r11,\trapnr
|
||||
|
@ -1289,8 +1289,10 @@ spapr_tce_platform_iommu_attach_dev(struct iommu_domain *platform_domain,
|
||||
struct iommu_table_group *table_group;
|
||||
|
||||
/* At first attach the ownership is already set */
|
||||
if (!domain)
|
||||
if (!domain) {
|
||||
iommu_group_put(grp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
table_group = iommu_group_get_iommudata(grp);
|
||||
/*
|
||||
|
@ -230,7 +230,7 @@ again:
|
||||
* This allows interrupts to be unmasked without hard disabling, and
|
||||
* also without new hard interrupts coming in ahead of pending ones.
|
||||
*/
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
"1: \n"
|
||||
" lbz 9,%0(13) \n"
|
||||
" cmpwi 9,0 \n"
|
||||
|
@ -27,10 +27,22 @@
|
||||
#include <asm/ftrace.h>
|
||||
#include <asm/syscall.h>
|
||||
#include <asm/inst.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
#define NUM_FTRACE_TRAMPS 2
|
||||
static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS];
|
||||
|
||||
unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
if (addr >= (unsigned long)__exittext_begin && addr < (unsigned long)__exittext_end)
|
||||
return 0;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY))
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
static ppc_inst_t ftrace_create_branch_inst(unsigned long ip, unsigned long addr, int link)
|
||||
{
|
||||
ppc_inst_t op;
|
||||
|
@ -37,6 +37,11 @@
|
||||
#define NUM_FTRACE_TRAMPS 8
|
||||
static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS];
|
||||
|
||||
unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
return addr;
|
||||
}
|
||||
|
||||
static ppc_inst_t
|
||||
ftrace_call_replace(unsigned long ip, unsigned long addr, int link)
|
||||
{
|
||||
|
@ -281,7 +281,9 @@ SECTIONS
|
||||
* to deal with references from __bug_table
|
||||
*/
|
||||
.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
|
||||
__exittext_begin = .;
|
||||
EXIT_TEXT
|
||||
__exittext_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
@ -64,6 +64,7 @@ int __init __weak kasan_init_region(void *start, size_t size)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
k_start = k_start & PAGE_MASK;
|
||||
block = memblock_alloc(k_end - k_start, PAGE_SIZE);
|
||||
if (!block)
|
||||
return -ENOMEM;
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
#include "mpc85xx.h"
|
||||
|
||||
void __init mpc8536_ds_pic_init(void)
|
||||
static void __init mpc8536_ds_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN,
|
||||
0, 256, " OpenPIC ");
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "mpc85xx.h"
|
||||
|
||||
void __init mvme2500_pic_init(void)
|
||||
static void __init mvme2500_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0,
|
||||
MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU,
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "mpc85xx.h"
|
||||
|
||||
void __init p1010_rdb_pic_init(void)
|
||||
static void __init p1010_rdb_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN |
|
||||
MPIC_SINGLE_DEST_CPU,
|
||||
|
@ -370,7 +370,7 @@ exit:
|
||||
*
|
||||
* @pixclock: the wavelength, in picoseconds, of the clock
|
||||
*/
|
||||
void p1022ds_set_pixel_clock(unsigned int pixclock)
|
||||
static void p1022ds_set_pixel_clock(unsigned int pixclock)
|
||||
{
|
||||
struct device_node *guts_np = NULL;
|
||||
struct ccsr_guts __iomem *guts;
|
||||
@ -418,7 +418,7 @@ void p1022ds_set_pixel_clock(unsigned int pixclock)
|
||||
/**
|
||||
* p1022ds_valid_monitor_port: set the monitor port for sysfs
|
||||
*/
|
||||
enum fsl_diu_monitor_port
|
||||
static enum fsl_diu_monitor_port
|
||||
p1022ds_valid_monitor_port(enum fsl_diu_monitor_port port)
|
||||
{
|
||||
switch (port) {
|
||||
@ -432,7 +432,7 @@ p1022ds_valid_monitor_port(enum fsl_diu_monitor_port port)
|
||||
|
||||
#endif
|
||||
|
||||
void __init p1022_ds_pic_init(void)
|
||||
static void __init p1022_ds_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN |
|
||||
MPIC_SINGLE_DEST_CPU,
|
||||
|
@ -40,7 +40,7 @@
|
||||
*
|
||||
* @pixclock: the wavelength, in picoseconds, of the clock
|
||||
*/
|
||||
void p1022rdk_set_pixel_clock(unsigned int pixclock)
|
||||
static void p1022rdk_set_pixel_clock(unsigned int pixclock)
|
||||
{
|
||||
struct device_node *guts_np = NULL;
|
||||
struct ccsr_guts __iomem *guts;
|
||||
@ -88,7 +88,7 @@ void p1022rdk_set_pixel_clock(unsigned int pixclock)
|
||||
/**
|
||||
* p1022rdk_valid_monitor_port: set the monitor port for sysfs
|
||||
*/
|
||||
enum fsl_diu_monitor_port
|
||||
static enum fsl_diu_monitor_port
|
||||
p1022rdk_valid_monitor_port(enum fsl_diu_monitor_port port)
|
||||
{
|
||||
return FSL_DIU_PORT_DVI;
|
||||
@ -96,7 +96,7 @@ p1022rdk_valid_monitor_port(enum fsl_diu_monitor_port port)
|
||||
|
||||
#endif
|
||||
|
||||
void __init p1022_rdk_pic_init(void)
|
||||
static void __init p1022_rdk_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN |
|
||||
MPIC_SINGLE_DEST_CPU,
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "socrates_fpga_pic.h"
|
||||
|
||||
/*
|
||||
* The FPGA supports 9 interrupt sources, which can be routed to 3
|
||||
* interrupt request lines of the MPIC. The line to be used can be
|
||||
|
@ -37,7 +37,7 @@
|
||||
#define MPC85xx_L2CTL_L2I 0x40000000 /* L2 flash invalidate */
|
||||
#define MPC85xx_L2CTL_L2SIZ_MASK 0x30000000 /* L2 SRAM size (R/O) */
|
||||
|
||||
void __init xes_mpc85xx_pic_init(void)
|
||||
static void __init xes_mpc85xx_pic_init(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN,
|
||||
0, 256, " OpenPIC ");
|
||||
|
@ -662,8 +662,12 @@ u64 pseries_paravirt_steal_clock(int cpu)
|
||||
{
|
||||
struct lppaca *lppaca = &lppaca_of(cpu);
|
||||
|
||||
return be64_to_cpu(READ_ONCE(lppaca->enqueue_dispatch_tb)) +
|
||||
be64_to_cpu(READ_ONCE(lppaca->ready_enqueue_tb));
|
||||
/*
|
||||
* VPA steal time counters are reported at TB frequency. Hence do a
|
||||
* conversion to ns before returning
|
||||
*/
|
||||
return tb_to_ns(be64_to_cpu(READ_ONCE(lppaca->enqueue_dispatch_tb)) +
|
||||
be64_to_cpu(READ_ONCE(lppaca->ready_enqueue_tb)));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -41,7 +41,7 @@ struct memcons memcons = {
|
||||
.input_end = &memcons_input[CONFIG_PPC_MEMCONS_INPUT_SIZE],
|
||||
};
|
||||
|
||||
void memcons_putc(char c)
|
||||
static void memcons_putc(char c)
|
||||
{
|
||||
char *new_output_pos;
|
||||
|
||||
@ -54,7 +54,7 @@ void memcons_putc(char c)
|
||||
memcons.output_pos = new_output_pos;
|
||||
}
|
||||
|
||||
int memcons_getc_poll(void)
|
||||
static int memcons_getc_poll(void)
|
||||
{
|
||||
char c;
|
||||
char *new_input_pos;
|
||||
@ -77,7 +77,7 @@ int memcons_getc_poll(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int memcons_getc(void)
|
||||
static int memcons_getc(void)
|
||||
{
|
||||
int c;
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
static __always_inline unsigned int __arch_hweight32(unsigned int w)
|
||||
{
|
||||
#ifdef CONFIG_RISCV_ISA_ZBB
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
@ -51,7 +51,7 @@ static inline unsigned int __arch_hweight8(unsigned int w)
|
||||
static __always_inline unsigned long __arch_hweight64(__u64 w)
|
||||
{
|
||||
# ifdef CONFIG_RISCV_ISA_ZBB
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
|
@ -39,7 +39,7 @@ static __always_inline unsigned long variable__ffs(unsigned long word)
|
||||
{
|
||||
int num;
|
||||
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
@ -95,7 +95,7 @@ static __always_inline unsigned long variable__fls(unsigned long word)
|
||||
{
|
||||
int num;
|
||||
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
@ -154,7 +154,7 @@ static __always_inline int variable_ffs(int x)
|
||||
if (!x)
|
||||
return 0;
|
||||
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
@ -209,7 +209,7 @@ static __always_inline int variable_fls(unsigned int x)
|
||||
if (!x)
|
||||
return 0;
|
||||
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[legacy]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
: : : : legacy);
|
||||
|
||||
|
@ -53,7 +53,7 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
|
||||
IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) {
|
||||
unsigned long fold_temp;
|
||||
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
:
|
||||
:
|
||||
|
@ -80,7 +80,7 @@ riscv_has_extension_likely(const unsigned long ext)
|
||||
"ext must be < RISCV_ISA_EXT_MAX");
|
||||
|
||||
if (IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) {
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
ALTERNATIVE("j %l[l_no]", "nop", 0, %[ext], 1)
|
||||
:
|
||||
: [ext] "i" (ext)
|
||||
@ -103,7 +103,7 @@ riscv_has_extension_unlikely(const unsigned long ext)
|
||||
"ext must be < RISCV_ISA_EXT_MAX");
|
||||
|
||||
if (IS_ENABLED(CONFIG_RISCV_ALTERNATIVE)) {
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
ALTERNATIVE("nop", "j %l[l_yes]", 0, %[ext], 1)
|
||||
:
|
||||
: [ext] "i" (ext)
|
||||
|
@ -11,6 +11,9 @@ static inline void arch_clear_hugepage_flags(struct page *page)
|
||||
}
|
||||
#define arch_clear_hugepage_flags arch_clear_hugepage_flags
|
||||
|
||||
bool arch_hugetlb_migration_supported(struct hstate *h);
|
||||
#define arch_hugetlb_migration_supported arch_hugetlb_migration_supported
|
||||
|
||||
#ifdef CONFIG_RISCV_ISA_SVNAPOT
|
||||
#define __HAVE_ARCH_HUGE_PTE_CLEAR
|
||||
void huge_pte_clear(struct mm_struct *mm, unsigned long addr,
|
||||
|
@ -17,7 +17,7 @@
|
||||
static __always_inline bool arch_static_branch(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
" .align 2 \n\t"
|
||||
" .option push \n\t"
|
||||
" .option norelax \n\t"
|
||||
@ -39,7 +39,7 @@ label:
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
asm_volatile_goto(
|
||||
asm goto(
|
||||
" .align 2 \n\t"
|
||||
" .option push \n\t"
|
||||
" .option norelax \n\t"
|
||||
|
@ -21,4 +21,9 @@ static inline bool on_thread_stack(void)
|
||||
return !(((unsigned long)(current->stack) ^ current_stack_pointer) & ~(THREAD_SIZE - 1));
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_VMAP_STACK
|
||||
DECLARE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack);
|
||||
#endif /* CONFIG_VMAP_STACK */
|
||||
|
||||
#endif /* _ASM_RISCV_STACKTRACE_H */
|
||||
|
@ -16,7 +16,7 @@ static void tlb_flush(struct mmu_gather *tlb);
|
||||
static inline void tlb_flush(struct mmu_gather *tlb)
|
||||
{
|
||||
#ifdef CONFIG_MMU
|
||||
if (tlb->fullmm || tlb->need_flush_all)
|
||||
if (tlb->fullmm || tlb->need_flush_all || tlb->freed_tables)
|
||||
flush_tlb_mm(tlb->mm);
|
||||
else
|
||||
flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end,
|
||||
|
@ -75,6 +75,7 @@ static inline void flush_tlb_kernel_range(unsigned long start,
|
||||
|
||||
#define flush_tlb_mm(mm) flush_tlb_all()
|
||||
#define flush_tlb_mm_range(mm, start, end, page_size) flush_tlb_all()
|
||||
#define local_flush_tlb_kernel_range(start, end) flush_tlb_all()
|
||||
#endif /* !CONFIG_SMP || !CONFIG_MMU */
|
||||
|
||||
#endif /* _ASM_RISCV_TLBFLUSH_H */
|
||||
|
@ -139,6 +139,33 @@ enum KVM_RISCV_ISA_EXT_ID {
|
||||
KVM_RISCV_ISA_EXT_ZIHPM,
|
||||
KVM_RISCV_ISA_EXT_SMSTATEEN,
|
||||
KVM_RISCV_ISA_EXT_ZICOND,
|
||||
KVM_RISCV_ISA_EXT_ZBC,
|
||||
KVM_RISCV_ISA_EXT_ZBKB,
|
||||
KVM_RISCV_ISA_EXT_ZBKC,
|
||||
KVM_RISCV_ISA_EXT_ZBKX,
|
||||
KVM_RISCV_ISA_EXT_ZKND,
|
||||
KVM_RISCV_ISA_EXT_ZKNE,
|
||||
KVM_RISCV_ISA_EXT_ZKNH,
|
||||
KVM_RISCV_ISA_EXT_ZKR,
|
||||
KVM_RISCV_ISA_EXT_ZKSED,
|
||||
KVM_RISCV_ISA_EXT_ZKSH,
|
||||
KVM_RISCV_ISA_EXT_ZKT,
|
||||
KVM_RISCV_ISA_EXT_ZVBB,
|
||||
KVM_RISCV_ISA_EXT_ZVBC,
|
||||
KVM_RISCV_ISA_EXT_ZVKB,
|
||||
KVM_RISCV_ISA_EXT_ZVKG,
|
||||
KVM_RISCV_ISA_EXT_ZVKNED,
|
||||
KVM_RISCV_ISA_EXT_ZVKNHA,
|
||||
KVM_RISCV_ISA_EXT_ZVKNHB,
|
||||
KVM_RISCV_ISA_EXT_ZVKSED,
|
||||
KVM_RISCV_ISA_EXT_ZVKSH,
|
||||
KVM_RISCV_ISA_EXT_ZVKT,
|
||||
KVM_RISCV_ISA_EXT_ZFH,
|
||||
KVM_RISCV_ISA_EXT_ZFHMIN,
|
||||
KVM_RISCV_ISA_EXT_ZIHINTNTL,
|
||||
KVM_RISCV_ISA_EXT_ZVFH,
|
||||
KVM_RISCV_ISA_EXT_ZVFHMIN,
|
||||
KVM_RISCV_ISA_EXT_ZFA,
|
||||
KVM_RISCV_ISA_EXT_MAX,
|
||||
};
|
||||
|
||||
|
@ -41,7 +41,7 @@ static int __init parse_no_stealacc(char *arg)
|
||||
|
||||
early_param("no-steal-acc", parse_no_stealacc);
|
||||
|
||||
DEFINE_PER_CPU(struct sbi_sta_struct, steal_time) __aligned(64);
|
||||
static DEFINE_PER_CPU(struct sbi_sta_struct, steal_time) __aligned(64);
|
||||
|
||||
static bool __init has_pv_steal_clock(void)
|
||||
{
|
||||
@ -91,8 +91,8 @@ static int pv_time_cpu_down_prepare(unsigned int cpu)
|
||||
static u64 pv_time_steal_clock(int cpu)
|
||||
{
|
||||
struct sbi_sta_struct *st = per_cpu_ptr(&steal_time, cpu);
|
||||
u32 sequence;
|
||||
u64 steal;
|
||||
__le32 sequence;
|
||||
__le64 steal;
|
||||
|
||||
/*
|
||||
* Check the sequence field before and after reading the steal
|
||||
|
@ -42,15 +42,42 @@ static const unsigned long kvm_isa_ext_arr[] = {
|
||||
KVM_ISA_EXT_ARR(SVPBMT),
|
||||
KVM_ISA_EXT_ARR(ZBA),
|
||||
KVM_ISA_EXT_ARR(ZBB),
|
||||
KVM_ISA_EXT_ARR(ZBC),
|
||||
KVM_ISA_EXT_ARR(ZBKB),
|
||||
KVM_ISA_EXT_ARR(ZBKC),
|
||||
KVM_ISA_EXT_ARR(ZBKX),
|
||||
KVM_ISA_EXT_ARR(ZBS),
|
||||
KVM_ISA_EXT_ARR(ZFA),
|
||||
KVM_ISA_EXT_ARR(ZFH),
|
||||
KVM_ISA_EXT_ARR(ZFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZICBOM),
|
||||
KVM_ISA_EXT_ARR(ZICBOZ),
|
||||
KVM_ISA_EXT_ARR(ZICNTR),
|
||||
KVM_ISA_EXT_ARR(ZICOND),
|
||||
KVM_ISA_EXT_ARR(ZICSR),
|
||||
KVM_ISA_EXT_ARR(ZIFENCEI),
|
||||
KVM_ISA_EXT_ARR(ZIHINTNTL),
|
||||
KVM_ISA_EXT_ARR(ZIHINTPAUSE),
|
||||
KVM_ISA_EXT_ARR(ZIHPM),
|
||||
KVM_ISA_EXT_ARR(ZKND),
|
||||
KVM_ISA_EXT_ARR(ZKNE),
|
||||
KVM_ISA_EXT_ARR(ZKNH),
|
||||
KVM_ISA_EXT_ARR(ZKR),
|
||||
KVM_ISA_EXT_ARR(ZKSED),
|
||||
KVM_ISA_EXT_ARR(ZKSH),
|
||||
KVM_ISA_EXT_ARR(ZKT),
|
||||
KVM_ISA_EXT_ARR(ZVBB),
|
||||
KVM_ISA_EXT_ARR(ZVBC),
|
||||
KVM_ISA_EXT_ARR(ZVFH),
|
||||
KVM_ISA_EXT_ARR(ZVFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZVKB),
|
||||
KVM_ISA_EXT_ARR(ZVKG),
|
||||
KVM_ISA_EXT_ARR(ZVKNED),
|
||||
KVM_ISA_EXT_ARR(ZVKNHA),
|
||||
KVM_ISA_EXT_ARR(ZVKNHB),
|
||||
KVM_ISA_EXT_ARR(ZVKSED),
|
||||
KVM_ISA_EXT_ARR(ZVKSH),
|
||||
KVM_ISA_EXT_ARR(ZVKT),
|
||||
};
|
||||
|
||||
static unsigned long kvm_riscv_vcpu_base2isa_ext(unsigned long base_ext)
|
||||
@ -92,13 +119,40 @@ static bool kvm_riscv_vcpu_isa_disable_allowed(unsigned long ext)
|
||||
case KVM_RISCV_ISA_EXT_SVNAPOT:
|
||||
case KVM_RISCV_ISA_EXT_ZBA:
|
||||
case KVM_RISCV_ISA_EXT_ZBB:
|
||||
case KVM_RISCV_ISA_EXT_ZBC:
|
||||
case KVM_RISCV_ISA_EXT_ZBKB:
|
||||
case KVM_RISCV_ISA_EXT_ZBKC:
|
||||
case KVM_RISCV_ISA_EXT_ZBKX:
|
||||
case KVM_RISCV_ISA_EXT_ZBS:
|
||||
case KVM_RISCV_ISA_EXT_ZFA:
|
||||
case KVM_RISCV_ISA_EXT_ZFH:
|
||||
case KVM_RISCV_ISA_EXT_ZFHMIN:
|
||||
case KVM_RISCV_ISA_EXT_ZICNTR:
|
||||
case KVM_RISCV_ISA_EXT_ZICOND:
|
||||
case KVM_RISCV_ISA_EXT_ZICSR:
|
||||
case KVM_RISCV_ISA_EXT_ZIFENCEI:
|
||||
case KVM_RISCV_ISA_EXT_ZIHINTNTL:
|
||||
case KVM_RISCV_ISA_EXT_ZIHINTPAUSE:
|
||||
case KVM_RISCV_ISA_EXT_ZIHPM:
|
||||
case KVM_RISCV_ISA_EXT_ZKND:
|
||||
case KVM_RISCV_ISA_EXT_ZKNE:
|
||||
case KVM_RISCV_ISA_EXT_ZKNH:
|
||||
case KVM_RISCV_ISA_EXT_ZKR:
|
||||
case KVM_RISCV_ISA_EXT_ZKSED:
|
||||
case KVM_RISCV_ISA_EXT_ZKSH:
|
||||
case KVM_RISCV_ISA_EXT_ZKT:
|
||||
case KVM_RISCV_ISA_EXT_ZVBB:
|
||||
case KVM_RISCV_ISA_EXT_ZVBC:
|
||||
case KVM_RISCV_ISA_EXT_ZVFH:
|
||||
case KVM_RISCV_ISA_EXT_ZVFHMIN:
|
||||
case KVM_RISCV_ISA_EXT_ZVKB:
|
||||
case KVM_RISCV_ISA_EXT_ZVKG:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNED:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNHA:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNHB:
|
||||
case KVM_RISCV_ISA_EXT_ZVKSED:
|
||||
case KVM_RISCV_ISA_EXT_ZVKSH:
|
||||
case KVM_RISCV_ISA_EXT_ZVKT:
|
||||
return false;
|
||||
/* Extensions which can be disabled using Smstateen */
|
||||
case KVM_RISCV_ISA_EXT_SSAIA:
|
||||
|
@ -26,8 +26,12 @@ void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
gpa_t shmem = vcpu->arch.sta.shmem;
|
||||
u64 last_steal = vcpu->arch.sta.last_steal;
|
||||
u32 *sequence_ptr, sequence;
|
||||
u64 *steal_ptr, steal;
|
||||
__le32 __user *sequence_ptr;
|
||||
__le64 __user *steal_ptr;
|
||||
__le32 sequence_le;
|
||||
__le64 steal_le;
|
||||
u32 sequence;
|
||||
u64 steal;
|
||||
unsigned long hva;
|
||||
gfn_t gfn;
|
||||
|
||||
@ -47,22 +51,22 @@ void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu)
|
||||
return;
|
||||
}
|
||||
|
||||
sequence_ptr = (u32 *)(hva + offset_in_page(shmem) +
|
||||
sequence_ptr = (__le32 __user *)(hva + offset_in_page(shmem) +
|
||||
offsetof(struct sbi_sta_struct, sequence));
|
||||
steal_ptr = (u64 *)(hva + offset_in_page(shmem) +
|
||||
steal_ptr = (__le64 __user *)(hva + offset_in_page(shmem) +
|
||||
offsetof(struct sbi_sta_struct, steal));
|
||||
|
||||
if (WARN_ON(get_user(sequence, sequence_ptr)))
|
||||
if (WARN_ON(get_user(sequence_le, sequence_ptr)))
|
||||
return;
|
||||
|
||||
sequence = le32_to_cpu(sequence);
|
||||
sequence = le32_to_cpu(sequence_le);
|
||||
sequence += 1;
|
||||
|
||||
if (WARN_ON(put_user(cpu_to_le32(sequence), sequence_ptr)))
|
||||
return;
|
||||
|
||||
if (!WARN_ON(get_user(steal, steal_ptr))) {
|
||||
steal = le64_to_cpu(steal);
|
||||
if (!WARN_ON(get_user(steal_le, steal_ptr))) {
|
||||
steal = le64_to_cpu(steal_le);
|
||||
vcpu->arch.sta.last_steal = READ_ONCE(current->sched_info.run_delay);
|
||||
steal += vcpu->arch.sta.last_steal - last_steal;
|
||||
WARN_ON(put_user(cpu_to_le64(steal), steal_ptr));
|
||||
|
@ -53,7 +53,7 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
||||
* support, so nop when Zbb is available and jump when Zbb is
|
||||
* not available.
|
||||
*/
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
:
|
||||
:
|
||||
@ -170,7 +170,7 @@ do_csum_with_alignment(const unsigned char *buff, int len)
|
||||
* support, so nop when Zbb is available and jump when Zbb is
|
||||
* not available.
|
||||
*/
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
:
|
||||
:
|
||||
@ -178,7 +178,7 @@ do_csum_with_alignment(const unsigned char *buff, int len)
|
||||
: no_zbb);
|
||||
|
||||
#ifdef CONFIG_32BIT
|
||||
asm_volatile_goto(".option push \n\
|
||||
asm_goto_output(".option push \n\
|
||||
.option arch,+zbb \n\
|
||||
rori %[fold_temp], %[csum], 16 \n\
|
||||
andi %[offset], %[offset], 1 \n\
|
||||
@ -193,7 +193,7 @@ do_csum_with_alignment(const unsigned char *buff, int len)
|
||||
|
||||
return (unsigned short)csum;
|
||||
#else /* !CONFIG_32BIT */
|
||||
asm_volatile_goto(".option push \n\
|
||||
asm_goto_output(".option push \n\
|
||||
.option arch,+zbb \n\
|
||||
rori %[fold_temp], %[csum], 32 \n\
|
||||
add %[csum], %[fold_temp], %[csum] \n\
|
||||
@ -257,7 +257,7 @@ do_csum_no_alignment(const unsigned char *buff, int len)
|
||||
* support, so nop when Zbb is available and jump when Zbb is
|
||||
* not available.
|
||||
*/
|
||||
asm_volatile_goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
asm goto(ALTERNATIVE("j %l[no_zbb]", "nop", 0,
|
||||
RISCV_ISA_EXT_ZBB, 1)
|
||||
:
|
||||
:
|
||||
|
@ -125,6 +125,26 @@ pte_t *huge_pte_offset(struct mm_struct *mm,
|
||||
return pte;
|
||||
}
|
||||
|
||||
unsigned long hugetlb_mask_last_page(struct hstate *h)
|
||||
{
|
||||
unsigned long hp_size = huge_page_size(h);
|
||||
|
||||
switch (hp_size) {
|
||||
#ifndef __PAGETABLE_PMD_FOLDED
|
||||
case PUD_SIZE:
|
||||
return P4D_SIZE - PUD_SIZE;
|
||||
#endif
|
||||
case PMD_SIZE:
|
||||
return PUD_SIZE - PMD_SIZE;
|
||||
case napot_cont_size(NAPOT_CONT64KB_ORDER):
|
||||
return PMD_SIZE - napot_cont_size(NAPOT_CONT64KB_ORDER);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0UL;
|
||||
}
|
||||
|
||||
static pte_t get_clear_contig(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pte_t *ptep,
|
||||
@ -177,13 +197,36 @@ pte_t arch_make_huge_pte(pte_t entry, unsigned int shift, vm_flags_t flags)
|
||||
return entry;
|
||||
}
|
||||
|
||||
static void clear_flush(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pte_t *ptep,
|
||||
unsigned long pgsize,
|
||||
unsigned long ncontig)
|
||||
{
|
||||
struct vm_area_struct vma = TLB_FLUSH_VMA(mm, 0);
|
||||
unsigned long i, saddr = addr;
|
||||
|
||||
for (i = 0; i < ncontig; i++, addr += pgsize, ptep++)
|
||||
ptep_get_and_clear(mm, addr, ptep);
|
||||
|
||||
flush_tlb_range(&vma, saddr, addr);
|
||||
}
|
||||
|
||||
/*
|
||||
* When dealing with NAPOT mappings, the privileged specification indicates that
|
||||
* "if an update needs to be made, the OS generally should first mark all of the
|
||||
* PTEs invalid, then issue SFENCE.VMA instruction(s) covering all 4 KiB regions
|
||||
* within the range, [...] then update the PTE(s), as described in Section
|
||||
* 4.2.1.". That's the equivalent of the Break-Before-Make approach used by
|
||||
* arm64.
|
||||
*/
|
||||
void set_huge_pte_at(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pte_t *ptep,
|
||||
pte_t pte,
|
||||
unsigned long sz)
|
||||
{
|
||||
unsigned long hugepage_shift;
|
||||
unsigned long hugepage_shift, pgsize;
|
||||
int i, pte_num;
|
||||
|
||||
if (sz >= PGDIR_SIZE)
|
||||
@ -198,7 +241,22 @@ void set_huge_pte_at(struct mm_struct *mm,
|
||||
hugepage_shift = PAGE_SHIFT;
|
||||
|
||||
pte_num = sz >> hugepage_shift;
|
||||
for (i = 0; i < pte_num; i++, ptep++, addr += (1 << hugepage_shift))
|
||||
pgsize = 1 << hugepage_shift;
|
||||
|
||||
if (!pte_present(pte)) {
|
||||
for (i = 0; i < pte_num; i++, ptep++, addr += pgsize)
|
||||
set_ptes(mm, addr, ptep, pte, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pte_napot(pte)) {
|
||||
set_ptes(mm, addr, ptep, pte, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
clear_flush(mm, addr, ptep, pgsize, pte_num);
|
||||
|
||||
for (i = 0; i < pte_num; i++, ptep++, addr += pgsize)
|
||||
set_pte_at(mm, addr, ptep, pte);
|
||||
}
|
||||
|
||||
@ -306,7 +364,7 @@ void huge_pte_clear(struct mm_struct *mm,
|
||||
pte_clear(mm, addr, ptep);
|
||||
}
|
||||
|
||||
static __init bool is_napot_size(unsigned long size)
|
||||
static bool is_napot_size(unsigned long size)
|
||||
{
|
||||
unsigned long order;
|
||||
|
||||
@ -334,7 +392,7 @@ arch_initcall(napot_hugetlbpages_init);
|
||||
|
||||
#else
|
||||
|
||||
static __init bool is_napot_size(unsigned long size)
|
||||
static bool is_napot_size(unsigned long size)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -351,7 +409,7 @@ int pmd_huge(pmd_t pmd)
|
||||
return pmd_leaf(pmd);
|
||||
}
|
||||
|
||||
bool __init arch_hugetlb_valid_size(unsigned long size)
|
||||
static bool __hugetlb_valid_size(unsigned long size)
|
||||
{
|
||||
if (size == HPAGE_SIZE)
|
||||
return true;
|
||||
@ -363,6 +421,16 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool __init arch_hugetlb_valid_size(unsigned long size)
|
||||
{
|
||||
return __hugetlb_valid_size(size);
|
||||
}
|
||||
|
||||
bool arch_hugetlb_migration_supported(struct hstate *h)
|
||||
{
|
||||
return __hugetlb_valid_size(huge_page_size(h));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CONTIG_ALLOC
|
||||
static __init int gigantic_pages_init(void)
|
||||
{
|
||||
|
@ -1385,6 +1385,10 @@ void __init misc_mem_init(void)
|
||||
early_memtest(min_low_pfn << PAGE_SHIFT, max_low_pfn << PAGE_SHIFT);
|
||||
arch_numa_init();
|
||||
sparse_init();
|
||||
#ifdef CONFIG_SPARSEMEM_VMEMMAP
|
||||
/* The entire VMEMMAP region has been populated. Flush TLB for this region */
|
||||
local_flush_tlb_kernel_range(VMEMMAP_START, VMEMMAP_END);
|
||||
#endif
|
||||
zone_sizes_init();
|
||||
arch_reserve_crashkernel();
|
||||
memblock_dump_all();
|
||||
|
@ -66,9 +66,10 @@ static inline void local_flush_tlb_range_asid(unsigned long start,
|
||||
local_flush_tlb_range_threshold_asid(start, size, stride, asid);
|
||||
}
|
||||
|
||||
/* Flush a range of kernel pages without broadcasting */
|
||||
void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
local_flush_tlb_range_asid(start, end, PAGE_SIZE, FLUSH_TLB_NO_ASID);
|
||||
local_flush_tlb_range_asid(start, end - start, PAGE_SIZE, FLUSH_TLB_NO_ASID);
|
||||
}
|
||||
|
||||
static void __ipi_flush_tlb_all(void *info)
|
||||
@ -233,4 +234,5 @@ void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)
|
||||
{
|
||||
__flush_tlb_range(&batch->cpumask, FLUSH_TLB_NO_ASID, 0,
|
||||
FLUSH_TLB_MAX_SIZE, PAGE_SIZE);
|
||||
cpumask_clear(&batch->cpumask);
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("0: brcl 0,%l[label]\n"
|
||||
asm goto("0: brcl 0,%l[label]\n"
|
||||
".pushsection __jump_table,\"aw\"\n"
|
||||
".balign 8\n"
|
||||
".long 0b-.,%l[label]-.\n"
|
||||
@ -39,7 +39,7 @@ label:
|
||||
|
||||
static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
|
||||
{
|
||||
asm_volatile_goto("0: brcl 15,%l[label]\n"
|
||||
asm goto("0: brcl 15,%l[label]\n"
|
||||
".pushsection __jump_table,\"aw\"\n"
|
||||
".balign 8\n"
|
||||
".long 0b-.,%l[label]-.\n"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user