mirror of https://gitee.com/openkylin/linux.git
Merge branch 'sched/urgent'
This commit is contained in:
commit
015dc08918
5
.mailmap
5
.mailmap
|
@ -90,11 +90,16 @@ Frank Rowand <frowand.list@gmail.com> <frank.rowand@sonymobile.com>
|
||||||
Frank Zago <fzago@systemfabricworks.com>
|
Frank Zago <fzago@systemfabricworks.com>
|
||||||
Gao Xiang <xiang@kernel.org> <gaoxiang25@huawei.com>
|
Gao Xiang <xiang@kernel.org> <gaoxiang25@huawei.com>
|
||||||
Gao Xiang <xiang@kernel.org> <hsiangkao@aol.com>
|
Gao Xiang <xiang@kernel.org> <hsiangkao@aol.com>
|
||||||
|
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <gerald.schaefer@de.ibm.com>
|
||||||
|
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@de.ibm.com>
|
||||||
|
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@linux.vnet.ibm.com>
|
||||||
Greg Kroah-Hartman <greg@echidna.(none)>
|
Greg Kroah-Hartman <greg@echidna.(none)>
|
||||||
Greg Kroah-Hartman <gregkh@suse.de>
|
Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
Greg Kroah-Hartman <greg@kroah.com>
|
Greg Kroah-Hartman <greg@kroah.com>
|
||||||
Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com>
|
Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com>
|
||||||
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
||||||
|
Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com>
|
||||||
|
Heiko Carstens <hca@linux.ibm.com> <heiko.carstens@de.ibm.com>
|
||||||
Henk Vergonet <Henk.Vergonet@gmail.com>
|
Henk Vergonet <Henk.Vergonet@gmail.com>
|
||||||
Henrik Kretzschmar <henne@nachtwindheim.de>
|
Henrik Kretzschmar <henne@nachtwindheim.de>
|
||||||
Henrik Rydberg <rydberg@bitmath.org>
|
Henrik Rydberg <rydberg@bitmath.org>
|
||||||
|
|
|
@ -258,7 +258,7 @@ Configuring the kernel
|
||||||
Compiling the kernel
|
Compiling the kernel
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
- Make sure you have at least gcc 4.6 available.
|
- Make sure you have at least gcc 4.9 available.
|
||||||
For more information, refer to :ref:`Documentation/process/changes.rst <changes>`.
|
For more information, refer to :ref:`Documentation/process/changes.rst <changes>`.
|
||||||
|
|
||||||
Please note that you can still run a.out user programs with this kernel.
|
Please note that you can still run a.out user programs with this kernel.
|
||||||
|
|
|
@ -171,6 +171,7 @@ infrastructure:
|
||||||
|
|
||||||
|
|
||||||
3) ID_AA64PFR1_EL1 - Processor Feature Register 1
|
3) ID_AA64PFR1_EL1 - Processor Feature Register 1
|
||||||
|
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
| Name | bits | visible |
|
| Name | bits | visible |
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
|
@ -181,6 +182,7 @@ infrastructure:
|
||||||
|
|
||||||
|
|
||||||
4) MIDR_EL1 - Main ID Register
|
4) MIDR_EL1 - Main ID Register
|
||||||
|
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
| Name | bits | visible |
|
| Name | bits | visible |
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
|
|
|
@ -492,13 +492,6 @@ set max_budget to higher values than those to which BFQ would have set
|
||||||
it with auto-tuning. An alternative way to achieve this goal is to
|
it with auto-tuning. An alternative way to achieve this goal is to
|
||||||
just increase the value of timeout_sync, leaving max_budget equal to 0.
|
just increase the value of timeout_sync, leaving max_budget equal to 0.
|
||||||
|
|
||||||
weights
|
|
||||||
-------
|
|
||||||
|
|
||||||
Read-only parameter, used to show the weights of the currently active
|
|
||||||
BFQ queues.
|
|
||||||
|
|
||||||
|
|
||||||
4. Group scheduling with BFQ
|
4. Group scheduling with BFQ
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
@ -566,7 +559,7 @@ Parameters to set
|
||||||
For each group, there is only the following parameter to set.
|
For each group, there is only the following parameter to set.
|
||||||
|
|
||||||
weight (namely blkio.bfq.weight or io.bfq-weight): the weight of the
|
weight (namely blkio.bfq.weight or io.bfq-weight): the weight of the
|
||||||
group inside its parent. Available values: 1..10000 (default 100). The
|
group inside its parent. Available values: 1..1000 (default 100). The
|
||||||
linear mapping between ioprio and weights, described at the beginning
|
linear mapping between ioprio and weights, described at the beginning
|
||||||
of the tunable section, is still valid, but all weights higher than
|
of the tunable section, is still valid, but all weights higher than
|
||||||
IOPRIO_BE_NR*10 are mapped to ioprio 0.
|
IOPRIO_BE_NR*10 are mapped to ioprio 0.
|
||||||
|
|
|
@ -204,6 +204,14 @@ Returns the maximum size of a mapping for the device. The size parameter
|
||||||
of the mapping functions like dma_map_single(), dma_map_page() and
|
of the mapping functions like dma_map_single(), dma_map_page() and
|
||||||
others should not be larger than the returned value.
|
others should not be larger than the returned value.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
bool
|
||||||
|
dma_need_sync(struct device *dev, dma_addr_t dma_addr);
|
||||||
|
|
||||||
|
Returns %true if dma_sync_single_for_{device,cpu} calls are required to
|
||||||
|
transfer memory ownership. Returns %false if those calls can be skipped.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
|
|
|
@ -560,8 +560,8 @@ When the NFS export feature is enabled, all directory index entries are
|
||||||
verified on mount time to check that upper file handles are not stale.
|
verified on mount time to check that upper file handles are not stale.
|
||||||
This verification may cause significant overhead in some cases.
|
This verification may cause significant overhead in some cases.
|
||||||
|
|
||||||
Note: the mount options index=off,nfs_export=on are conflicting and will
|
Note: the mount options index=off,nfs_export=on are conflicting for a
|
||||||
result in an error.
|
read-write mount and will result in an error.
|
||||||
|
|
||||||
|
|
||||||
Testsuite
|
Testsuite
|
||||||
|
|
|
@ -434,7 +434,7 @@ can set up your network then:
|
||||||
ifconfig arc0 insight
|
ifconfig arc0 insight
|
||||||
route add insight arc0
|
route add insight arc0
|
||||||
route add freedom arc0 /* I would use the subnet here (like I said
|
route add freedom arc0 /* I would use the subnet here (like I said
|
||||||
to to in "single protocol" above),
|
to in "single protocol" above),
|
||||||
but the rest of the subnet
|
but the rest of the subnet
|
||||||
unfortunately lies across the PPP
|
unfortunately lies across the PPP
|
||||||
link on freedom, which confuses
|
link on freedom, which confuses
|
||||||
|
|
|
@ -6,7 +6,7 @@ AX.25
|
||||||
|
|
||||||
To use the amateur radio protocols within Linux you will need to get a
|
To use the amateur radio protocols within Linux you will need to get a
|
||||||
suitable copy of the AX.25 Utilities. More detailed information about
|
suitable copy of the AX.25 Utilities. More detailed information about
|
||||||
AX.25, NET/ROM and ROSE, associated programs and and utilities can be
|
AX.25, NET/ROM and ROSE, associated programs and utilities can be
|
||||||
found on http://www.linux-ax25.org.
|
found on http://www.linux-ax25.org.
|
||||||
|
|
||||||
There is an active mailing list for discussing Linux amateur radio matters
|
There is an active mailing list for discussing Linux amateur radio matters
|
||||||
|
|
|
@ -144,7 +144,7 @@ UCAN_COMMAND_SET_BITTIMING
|
||||||
|
|
||||||
*Host2Dev; mandatory*
|
*Host2Dev; mandatory*
|
||||||
|
|
||||||
Setup bittiming by sending the the structure
|
Setup bittiming by sending the structure
|
||||||
``ucan_ctl_payload_t.cmd_set_bittiming`` (see ``struct bittiming`` for
|
``ucan_ctl_payload_t.cmd_set_bittiming`` (see ``struct bittiming`` for
|
||||||
details)
|
details)
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ UCAN_IN_TX_COMPLETE
|
||||||
zero
|
zero
|
||||||
|
|
||||||
The CAN device has sent a message to the CAN bus. It answers with a
|
The CAN device has sent a message to the CAN bus. It answers with a
|
||||||
list of of tuples <echo-ids, flags>.
|
list of tuples <echo-ids, flags>.
|
||||||
|
|
||||||
The echo-id identifies the frame from (echos the id from a previous
|
The echo-id identifies the frame from (echos the id from a previous
|
||||||
UCAN_OUT_TX message). The flag indicates the result of the
|
UCAN_OUT_TX message). The flag indicates the result of the
|
||||||
|
|
|
@ -95,7 +95,7 @@ Ethernet switch.
|
||||||
Networking stack hooks
|
Networking stack hooks
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
When a master netdev is used with DSA, a small hook is placed in in the
|
When a master netdev is used with DSA, a small hook is placed in the
|
||||||
networking stack is in order to have the DSA subsystem process the Ethernet
|
networking stack is in order to have the DSA subsystem process the Ethernet
|
||||||
switch specific tagging protocol. DSA accomplishes this by registering a
|
switch specific tagging protocol. DSA accomplishes this by registering a
|
||||||
specific (and fake) Ethernet type (later becoming ``skb->protocol``) with the
|
specific (and fake) Ethernet type (later becoming ``skb->protocol``) with the
|
||||||
|
|
|
@ -741,7 +741,7 @@ tcp_fastopen - INTEGER
|
||||||
|
|
||||||
Default: 0x1
|
Default: 0x1
|
||||||
|
|
||||||
Note that that additional client or server features are only
|
Note that additional client or server features are only
|
||||||
effective if the basic support (0x1 and 0x2) are enabled respectively.
|
effective if the basic support (0x1 and 0x2) are enabled respectively.
|
||||||
|
|
||||||
tcp_fastopen_blackhole_timeout_sec - INTEGER
|
tcp_fastopen_blackhole_timeout_sec - INTEGER
|
||||||
|
|
|
@ -114,7 +114,7 @@ drop_entry - INTEGER
|
||||||
modes (when there is no enough available memory, the strategy
|
modes (when there is no enough available memory, the strategy
|
||||||
is enabled and the variable is automatically set to 2,
|
is enabled and the variable is automatically set to 2,
|
||||||
otherwise the strategy is disabled and the variable is set to
|
otherwise the strategy is disabled and the variable is set to
|
||||||
1), and 3 means that that the strategy is always enabled.
|
1), and 3 means that the strategy is always enabled.
|
||||||
|
|
||||||
drop_packet - INTEGER
|
drop_packet - INTEGER
|
||||||
- 0 - disabled (default)
|
- 0 - disabled (default)
|
||||||
|
|
|
@ -186,7 +186,7 @@ About the AF_RXRPC driver:
|
||||||
time [tunable] after the last connection using it discarded, in case a new
|
time [tunable] after the last connection using it discarded, in case a new
|
||||||
connection is made that could use it.
|
connection is made that could use it.
|
||||||
|
|
||||||
(#) A client-side connection is only shared between calls if they have have
|
(#) A client-side connection is only shared between calls if they have
|
||||||
the same key struct describing their security (and assuming the calls
|
the same key struct describing their security (and assuming the calls
|
||||||
would otherwise share the connection). Non-secured calls would also be
|
would otherwise share the connection). Non-secured calls would also be
|
||||||
able to share connections with each other.
|
able to share connections with each other.
|
||||||
|
|
|
@ -213,7 +213,7 @@ request buffers are not in memory. The operating system handles the fault by
|
||||||
updating CSB with the following data:
|
updating CSB with the following data:
|
||||||
|
|
||||||
csb.flags = CSB_V;
|
csb.flags = CSB_V;
|
||||||
csb.cc = CSB_CC_TRANSLATION;
|
csb.cc = CSB_CC_FAULT_ADDRESS;
|
||||||
csb.ce = CSB_CE_TERMINATION;
|
csb.ce = CSB_CE_TERMINATION;
|
||||||
csb.address = fault_address;
|
csb.address = fault_address;
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ you probably needn't concern yourself with pcmciautils.
|
||||||
====================== =============== ========================================
|
====================== =============== ========================================
|
||||||
Program Minimal version Command to check the version
|
Program Minimal version Command to check the version
|
||||||
====================== =============== ========================================
|
====================== =============== ========================================
|
||||||
GNU C 4.8 gcc --version
|
GNU C 4.9 gcc --version
|
||||||
GNU make 3.81 make --version
|
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
|
||||||
|
|
|
@ -319,6 +319,26 @@ If you are afraid to mix up your local variable names, you have another
|
||||||
problem, which is called the function-growth-hormone-imbalance syndrome.
|
problem, which is called the function-growth-hormone-imbalance syndrome.
|
||||||
See chapter 6 (Functions).
|
See chapter 6 (Functions).
|
||||||
|
|
||||||
|
For symbol names and documentation, avoid introducing new usage of
|
||||||
|
'master / slave' (or 'slave' independent of 'master') and 'blacklist /
|
||||||
|
whitelist'.
|
||||||
|
|
||||||
|
Recommended replacements for 'master / slave' are:
|
||||||
|
'{primary,main} / {secondary,replica,subordinate}'
|
||||||
|
'{initiator,requester} / {target,responder}'
|
||||||
|
'{controller,host} / {device,worker,proxy}'
|
||||||
|
'leader / follower'
|
||||||
|
'director / performer'
|
||||||
|
|
||||||
|
Recommended replacements for 'blacklist/whitelist' are:
|
||||||
|
'denylist / allowlist'
|
||||||
|
'blocklist / passlist'
|
||||||
|
|
||||||
|
Exceptions for introducing new usage is to maintain a userspace ABI/API,
|
||||||
|
or when updating code for an existing (as of 2020) hardware or protocol
|
||||||
|
specification that mandates those terms. For new specifications
|
||||||
|
translate specification usage of the terminology to the kernel coding
|
||||||
|
standard where possible.
|
||||||
|
|
||||||
5) Typedefs
|
5) Typedefs
|
||||||
-----------
|
-----------
|
||||||
|
|
|
@ -4339,14 +4339,15 @@ Errors:
|
||||||
#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001
|
#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001
|
||||||
|
|
||||||
struct kvm_vmx_nested_state_hdr {
|
struct kvm_vmx_nested_state_hdr {
|
||||||
__u32 flags;
|
|
||||||
__u64 vmxon_pa;
|
__u64 vmxon_pa;
|
||||||
__u64 vmcs12_pa;
|
__u64 vmcs12_pa;
|
||||||
__u64 preemption_timer_deadline;
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
__u16 flags;
|
__u16 flags;
|
||||||
} smm;
|
} smm;
|
||||||
|
|
||||||
|
__u32 flags;
|
||||||
|
__u64 preemption_timer_deadline;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kvm_vmx_nested_state_data {
|
struct kvm_vmx_nested_state_data {
|
||||||
|
|
16
MAINTAINERS
16
MAINTAINERS
|
@ -2929,6 +2929,7 @@ F: include/uapi/linux/atm*
|
||||||
|
|
||||||
ATMEL MACB ETHERNET DRIVER
|
ATMEL MACB ETHERNET DRIVER
|
||||||
M: Nicolas Ferre <nicolas.ferre@microchip.com>
|
M: Nicolas Ferre <nicolas.ferre@microchip.com>
|
||||||
|
M: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/cadence/
|
F: drivers/net/ethernet/cadence/
|
||||||
|
|
||||||
|
@ -3306,7 +3307,7 @@ X: arch/riscv/net/bpf_jit_comp32.c
|
||||||
|
|
||||||
BPF JIT for S390
|
BPF JIT for S390
|
||||||
M: Ilya Leoshkevich <iii@linux.ibm.com>
|
M: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
M: Heiko Carstens <heiko.carstens@de.ibm.com>
|
M: Heiko Carstens <hca@linux.ibm.com>
|
||||||
M: Vasily Gorbik <gor@linux.ibm.com>
|
M: Vasily Gorbik <gor@linux.ibm.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: bpf@vger.kernel.org
|
L: bpf@vger.kernel.org
|
||||||
|
@ -5021,7 +5022,6 @@ F: drivers/mfd/da91??-*.c
|
||||||
F: drivers/pinctrl/pinctrl-da90??.c
|
F: drivers/pinctrl/pinctrl-da90??.c
|
||||||
F: drivers/power/supply/da9052-battery.c
|
F: drivers/power/supply/da9052-battery.c
|
||||||
F: drivers/power/supply/da91??-*.c
|
F: drivers/power/supply/da91??-*.c
|
||||||
F: drivers/regulator/da903x.c
|
|
||||||
F: drivers/regulator/da9???-regulator.[ch]
|
F: drivers/regulator/da9???-regulator.[ch]
|
||||||
F: drivers/regulator/slg51000-regulator.[ch]
|
F: drivers/regulator/slg51000-regulator.[ch]
|
||||||
F: drivers/rtc/rtc-da90??.c
|
F: drivers/rtc/rtc-da90??.c
|
||||||
|
@ -5111,7 +5111,7 @@ M: Vinod Koul <vkoul@kernel.org>
|
||||||
L: dmaengine@vger.kernel.org
|
L: dmaengine@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
Q: https://patchwork.kernel.org/project/linux-dmaengine/list/
|
Q: https://patchwork.kernel.org/project/linux-dmaengine/list/
|
||||||
T: git git://git.infradead.org/users/vkoul/slave-dma.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git
|
||||||
F: Documentation/devicetree/bindings/dma/
|
F: Documentation/devicetree/bindings/dma/
|
||||||
F: Documentation/driver-api/dmaengine/
|
F: Documentation/driver-api/dmaengine/
|
||||||
F: drivers/dma/
|
F: drivers/dma/
|
||||||
|
@ -14831,7 +14831,7 @@ S: Maintained
|
||||||
F: drivers/video/fbdev/savage/
|
F: drivers/video/fbdev/savage/
|
||||||
|
|
||||||
S390
|
S390
|
||||||
M: Heiko Carstens <heiko.carstens@de.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@de.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
|
@ -14862,7 +14862,7 @@ F: drivers/s390/block/dasd*
|
||||||
F: include/linux/dasd_mod.h
|
F: include/linux/dasd_mod.h
|
||||||
|
|
||||||
S390 IOMMU (PCI)
|
S390 IOMMU (PCI)
|
||||||
M: Gerald Schaefer <gerald.schaefer@de.ibm.com>
|
M: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
|
@ -14890,7 +14890,7 @@ F: drivers/s390/net/
|
||||||
|
|
||||||
S390 PCI SUBSYSTEM
|
S390 PCI SUBSYSTEM
|
||||||
M: Niklas Schnelle <schnelle@linux.ibm.com>
|
M: Niklas Schnelle <schnelle@linux.ibm.com>
|
||||||
M: Gerald Schaefer <gerald.schaefer@de.ibm.com>
|
M: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
|
@ -17513,7 +17513,7 @@ F: Documentation/admin-guide/ufs.rst
|
||||||
F: fs/ufs/
|
F: fs/ufs/
|
||||||
|
|
||||||
UHID USERSPACE HID IO DRIVER
|
UHID USERSPACE HID IO DRIVER
|
||||||
M: David Herrmann <dh.herrmann@googlemail.com>
|
M: David Rheinsberg <david.rheinsberg@gmail.com>
|
||||||
L: linux-input@vger.kernel.org
|
L: linux-input@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/hid/uhid.c
|
F: drivers/hid/uhid.c
|
||||||
|
@ -18472,7 +18472,7 @@ S: Maintained
|
||||||
F: drivers/rtc/rtc-sd3078.c
|
F: drivers/rtc/rtc-sd3078.c
|
||||||
|
|
||||||
WIIMOTE HID DRIVER
|
WIIMOTE HID DRIVER
|
||||||
M: David Herrmann <dh.herrmann@googlemail.com>
|
M: David Rheinsberg <david.rheinsberg@gmail.com>
|
||||||
L: linux-input@vger.kernel.org
|
L: linux-input@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/hid/hid-wiimote*
|
F: drivers/hid/hid-wiimote*
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 8
|
PATCHLEVEL = 8
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc4
|
EXTRAVERSION = -rc6
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -170,6 +170,15 @@ config ARC_CPU_HS
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
config ARC_TUNE_MCPU
|
||||||
|
string "Override default -mcpu compiler flag"
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Override default -mcpu=xxx compiler flag (which is set depending on
|
||||||
|
the ISA version) with the specified value.
|
||||||
|
NOTE: If specified flag isn't supported by current compiler the
|
||||||
|
ISA default value will be used as a fallback.
|
||||||
|
|
||||||
config CPU_BIG_ENDIAN
|
config CPU_BIG_ENDIAN
|
||||||
bool "Enable Big Endian Mode"
|
bool "Enable Big Endian Mode"
|
||||||
help
|
help
|
||||||
|
@ -465,6 +474,12 @@ config ARC_IRQ_NO_AUTOSAVE
|
||||||
This is programmable and can be optionally disabled in which case
|
This is programmable and can be optionally disabled in which case
|
||||||
software INTERRUPT_PROLOGUE/EPILGUE do the needed work
|
software INTERRUPT_PROLOGUE/EPILGUE do the needed work
|
||||||
|
|
||||||
|
config ARC_LPB_DISABLE
|
||||||
|
bool "Disable loop buffer (LPB)"
|
||||||
|
help
|
||||||
|
On HS cores, loop buffer (LPB) is programmable in runtime and can
|
||||||
|
be optionally disabled.
|
||||||
|
|
||||||
endif # ISA_ARCV2
|
endif # ISA_ARCV2
|
||||||
|
|
||||||
endmenu # "ARC CPU Configuration"
|
endmenu # "ARC CPU Configuration"
|
||||||
|
|
|
@ -10,8 +10,25 @@ CROSS_COMPILE := $(call cc-cross-prefix, arc-linux- arceb-linux-)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
|
cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
|
||||||
cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
|
|
||||||
cflags-$(CONFIG_ISA_ARCV2) += -mcpu=hs38
|
tune-mcpu-def-$(CONFIG_ISA_ARCOMPACT) := -mcpu=arc700
|
||||||
|
tune-mcpu-def-$(CONFIG_ISA_ARCV2) := -mcpu=hs38
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARC_TUNE_MCPU),"")
|
||||||
|
cflags-y += $(tune-mcpu-def-y)
|
||||||
|
else
|
||||||
|
tune-mcpu := $(shell echo $(CONFIG_ARC_TUNE_MCPU))
|
||||||
|
tune-mcpu-ok := $(call cc-option-yn, $(tune-mcpu))
|
||||||
|
ifeq ($(tune-mcpu-ok),y)
|
||||||
|
cflags-y += $(tune-mcpu)
|
||||||
|
else
|
||||||
|
# The flag provided by 'CONFIG_ARC_TUNE_MCPU' option isn't known by this compiler
|
||||||
|
# (probably the compiler is too old). Use ISA default mcpu flag instead as a safe option.
|
||||||
|
$(warning ** WARNING ** CONFIG_ARC_TUNE_MCPU flag '$(tune-mcpu)' is unknown, fallback to '$(tune-mcpu-def-y)')
|
||||||
|
cflags-y += $(tune-mcpu-def-y)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
ifdef CONFIG_ARC_CURR_IN_REG
|
ifdef CONFIG_ARC_CURR_IN_REG
|
||||||
# For a global register defintion, make sure it gets passed to every file
|
# For a global register defintion, make sure it gets passed to every file
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#define R_ARC_32_PCREL 0x31
|
#define R_ARC_32_PCREL 0x31
|
||||||
|
|
||||||
/*to set parameters in the core dumps */
|
/*to set parameters in the core dumps */
|
||||||
#define ELF_ARCH EM_ARCOMPACT
|
#define ELF_ARCH EM_ARC_INUSE
|
||||||
#define ELF_CLASS ELFCLASS32
|
#define ELF_CLASS ELFCLASS32
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||||
|
|
|
@ -90,6 +90,9 @@ static inline void arch_local_irq_restore(unsigned long flags)
|
||||||
/*
|
/*
|
||||||
* Unconditionally Enable IRQs
|
* Unconditionally Enable IRQs
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_ARC_COMPACT_IRQ_LEVELS
|
||||||
|
extern void arch_local_irq_enable(void);
|
||||||
|
#else
|
||||||
static inline void arch_local_irq_enable(void)
|
static inline void arch_local_irq_enable(void)
|
||||||
{
|
{
|
||||||
unsigned long temp;
|
unsigned long temp;
|
||||||
|
@ -102,7 +105,7 @@ static inline void arch_local_irq_enable(void)
|
||||||
: "n"((STATUS_E1_MASK | STATUS_E2_MASK))
|
: "n"((STATUS_E1_MASK | STATUS_E2_MASK))
|
||||||
: "cc", "memory");
|
: "cc", "memory");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unconditionally Disable IRQs
|
* Unconditionally Disable IRQs
|
||||||
|
|
|
@ -165,7 +165,6 @@ END(EV_Extension)
|
||||||
tracesys:
|
tracesys:
|
||||||
; save EFA in case tracer wants the PC of traced task
|
; save EFA in case tracer wants the PC of traced task
|
||||||
; using ERET won't work since next-PC has already committed
|
; using ERET won't work since next-PC has already committed
|
||||||
lr r12, [efa]
|
|
||||||
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
||||||
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
||||||
|
|
||||||
|
@ -208,15 +207,9 @@ tracesys_exit:
|
||||||
; Breakpoint TRAP
|
; Breakpoint TRAP
|
||||||
; ---------------------------------------------
|
; ---------------------------------------------
|
||||||
trap_with_param:
|
trap_with_param:
|
||||||
|
mov r0, r12 ; EFA in case ptracer/gdb wants stop_pc
|
||||||
; stop_pc info by gdb needs this info
|
|
||||||
lr r0, [efa]
|
|
||||||
mov r1, sp
|
mov r1, sp
|
||||||
|
|
||||||
; Now that we have read EFA, it is safe to do "fake" rtie
|
|
||||||
; and get out of CPU exception mode
|
|
||||||
FAKE_RET_FROM_EXCPN
|
|
||||||
|
|
||||||
; Save callee regs in case gdb wants to have a look
|
; Save callee regs in case gdb wants to have a look
|
||||||
; SP will grow up by size of CALLEE Reg-File
|
; SP will grow up by size of CALLEE Reg-File
|
||||||
; NOTE: clobbers r12
|
; NOTE: clobbers r12
|
||||||
|
@ -243,6 +236,10 @@ ENTRY(EV_Trap)
|
||||||
|
|
||||||
EXCEPTION_PROLOGUE
|
EXCEPTION_PROLOGUE
|
||||||
|
|
||||||
|
lr r12, [efa]
|
||||||
|
|
||||||
|
FAKE_RET_FROM_EXCPN
|
||||||
|
|
||||||
;============ TRAP 1 :breakpoints
|
;============ TRAP 1 :breakpoints
|
||||||
; Check ECR for trap with arg (PROLOGUE ensures r10 has ECR)
|
; Check ECR for trap with arg (PROLOGUE ensures r10 has ECR)
|
||||||
bmsk.f 0, r10, 7
|
bmsk.f 0, r10, 7
|
||||||
|
@ -250,9 +247,6 @@ ENTRY(EV_Trap)
|
||||||
|
|
||||||
;============ TRAP (no param): syscall top level
|
;============ TRAP (no param): syscall top level
|
||||||
|
|
||||||
; First return from Exception to pure K mode (Exception/IRQs renabled)
|
|
||||||
FAKE_RET_FROM_EXCPN
|
|
||||||
|
|
||||||
; If syscall tracing ongoing, invoke pre-post-hooks
|
; If syscall tracing ongoing, invoke pre-post-hooks
|
||||||
GET_CURR_THR_INFO_FLAGS r10
|
GET_CURR_THR_INFO_FLAGS r10
|
||||||
btst r10, TIF_SYSCALL_TRACE
|
btst r10, TIF_SYSCALL_TRACE
|
||||||
|
|
|
@ -59,6 +59,14 @@
|
||||||
bclr r5, r5, STATUS_AD_BIT
|
bclr r5, r5, STATUS_AD_BIT
|
||||||
#endif
|
#endif
|
||||||
kflag r5
|
kflag r5
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARC_LPB_DISABLE
|
||||||
|
lr r5, [ARC_REG_LPB_BUILD]
|
||||||
|
breq r5, 0, 1f ; LPB doesn't exist
|
||||||
|
mov r5, 1
|
||||||
|
sr r5, [ARC_REG_LPB_CTRL]
|
||||||
|
1:
|
||||||
|
#endif /* CONFIG_ARC_LPB_DISABLE */
|
||||||
#endif
|
#endif
|
||||||
; Config DSP_CTRL properly, so kernel may use integer multiply,
|
; Config DSP_CTRL properly, so kernel may use integer multiply,
|
||||||
; multiply-accumulate, and divide operations
|
; multiply-accumulate, and divide operations
|
||||||
|
|
|
@ -58,10 +58,12 @@ static const struct id_to_str arc_legacy_rel[] = {
|
||||||
{ 0x00, NULL }
|
{ 0x00, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct id_to_str arc_cpu_rel[] = {
|
static const struct id_to_str arc_hs_ver54_rel[] = {
|
||||||
/* UARCH.MAJOR, Release */
|
/* UARCH.MAJOR, Release */
|
||||||
{ 0, "R3.10a"},
|
{ 0, "R3.10a"},
|
||||||
{ 1, "R3.50a"},
|
{ 1, "R3.50a"},
|
||||||
|
{ 2, "R3.60a"},
|
||||||
|
{ 3, "R4.00a"},
|
||||||
{ 0xFF, NULL }
|
{ 0xFF, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -117,12 +119,6 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)
|
||||||
struct bcr_uarch_build_arcv2 uarch;
|
struct bcr_uarch_build_arcv2 uarch;
|
||||||
const struct id_to_str *tbl;
|
const struct id_to_str *tbl;
|
||||||
|
|
||||||
/*
|
|
||||||
* Up until (including) the first core4 release (0x54) things were
|
|
||||||
* simple: AUX IDENTITY.ARCVER was sufficient to identify arc family
|
|
||||||
* and release: 0x50 to 0x53 was HS38, 0x54 was HS48 (dual issue)
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (cpu->core.family < 0x54) { /* includes arc700 */
|
if (cpu->core.family < 0x54) { /* includes arc700 */
|
||||||
|
|
||||||
for (tbl = &arc_legacy_rel[0]; tbl->id != 0; tbl++) {
|
for (tbl = &arc_legacy_rel[0]; tbl->id != 0; tbl++) {
|
||||||
|
@ -143,11 +139,10 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* However the subsequent HS release (same 0x54) allow HS38 or HS48
|
* Initial HS cores bumped AUX IDENTITY.ARCVER for each release until
|
||||||
* configurations and encode this info in a different BCR.
|
* ARCVER 0x54 which introduced AUX MICRO_ARCH_BUILD and subsequent
|
||||||
* The BCR was introduced in 0x54 so can't be read unconditionally.
|
* releases only update it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
READ_BCR(ARC_REG_MICRO_ARCH_BCR, uarch);
|
READ_BCR(ARC_REG_MICRO_ARCH_BCR, uarch);
|
||||||
|
|
||||||
if (uarch.prod == 4) {
|
if (uarch.prod == 4) {
|
||||||
|
@ -158,7 +153,7 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)
|
||||||
cpu->name = "HS38";
|
cpu->name = "HS38";
|
||||||
}
|
}
|
||||||
|
|
||||||
for (tbl = &arc_cpu_rel[0]; tbl->id != 0xFF; tbl++) {
|
for (tbl = &arc_hs_ver54_rel[0]; tbl->id != 0xFF; tbl++) {
|
||||||
if (uarch.maj == tbl->id) {
|
if (uarch.maj == tbl->id) {
|
||||||
cpu->release = tbl->str;
|
cpu->release = tbl->str;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1540,8 +1540,9 @@ target-module@cc000 { /* 0x481cc000, ap 50 46.0 */
|
||||||
reg = <0xcc020 0x4>;
|
reg = <0xcc020 0x4>;
|
||||||
reg-names = "rev";
|
reg-names = "rev";
|
||||||
/* Domains (P, C): per_pwrdm, l4ls_clkdm */
|
/* Domains (P, C): per_pwrdm, l4ls_clkdm */
|
||||||
clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>;
|
clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>,
|
||||||
clock-names = "fck";
|
<&dcan0_fck>;
|
||||||
|
clock-names = "fck", "osc";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0xcc000 0x2000>;
|
ranges = <0x0 0xcc000 0x2000>;
|
||||||
|
@ -1549,6 +1550,8 @@ target-module@cc000 { /* 0x481cc000, ap 50 46.0 */
|
||||||
dcan0: can@0 {
|
dcan0: can@0 {
|
||||||
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
||||||
reg = <0x0 0x2000>;
|
reg = <0x0 0x2000>;
|
||||||
|
clocks = <&dcan0_fck>;
|
||||||
|
clock-names = "fck";
|
||||||
syscon-raminit = <&scm_conf 0x644 0>;
|
syscon-raminit = <&scm_conf 0x644 0>;
|
||||||
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -1560,8 +1563,9 @@ target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */
|
||||||
reg = <0xd0020 0x4>;
|
reg = <0xd0020 0x4>;
|
||||||
reg-names = "rev";
|
reg-names = "rev";
|
||||||
/* Domains (P, C): per_pwrdm, l4ls_clkdm */
|
/* Domains (P, C): per_pwrdm, l4ls_clkdm */
|
||||||
clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>;
|
clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>,
|
||||||
clock-names = "fck";
|
<&dcan1_fck>;
|
||||||
|
clock-names = "fck", "osc";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0xd0000 0x2000>;
|
ranges = <0x0 0xd0000 0x2000>;
|
||||||
|
@ -1569,6 +1573,8 @@ target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */
|
||||||
dcan1: can@0 {
|
dcan1: can@0 {
|
||||||
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
||||||
reg = <0x0 0x2000>;
|
reg = <0x0 0x2000>;
|
||||||
|
clocks = <&dcan1_fck>;
|
||||||
|
clock-name = "fck";
|
||||||
syscon-raminit = <&scm_conf 0x644 1>;
|
syscon-raminit = <&scm_conf 0x644 1>;
|
||||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -110,7 +110,7 @@ sound-digital {
|
||||||
simple-audio-card,frame-master = <&sound_codec>;
|
simple-audio-card,frame-master = <&sound_codec>;
|
||||||
|
|
||||||
sound_cpu: simple-audio-card,cpu {
|
sound_cpu: simple-audio-card,cpu {
|
||||||
sound-dai = <&ssi2>;
|
sound-dai = <&ssi1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sound_codec: simple-audio-card,codec {
|
sound_codec: simple-audio-card,codec {
|
||||||
|
|
|
@ -11,7 +11,7 @@ / {
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
|
|
||||||
L2: l2-cache-controller@c4200000 {
|
L2: cache-controller@c4200000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xc4200000 0x1000>;
|
reg = <0xc4200000 0x1000>;
|
||||||
cache-unified;
|
cache-unified;
|
||||||
|
|
|
@ -105,6 +105,14 @@ proximity_sensor {
|
||||||
linux,code = <SW_FRONT_PROXIMITY>;
|
linux,code = <SW_FRONT_PROXIMITY>;
|
||||||
linux,can-disable;
|
linux,can-disable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
machine_cover {
|
||||||
|
label = "Machine Cover";
|
||||||
|
gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */
|
||||||
|
linux,input-type = <EV_SW>;
|
||||||
|
linux,code = <SW_MACHINE_COVER>;
|
||||||
|
linux,can-disable;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
isp1707: isp1707 {
|
isp1707: isp1707 {
|
||||||
|
@ -819,10 +827,6 @@ &mmc1 {
|
||||||
pinctrl-0 = <&mmc1_pins>;
|
pinctrl-0 = <&mmc1_pins>;
|
||||||
vmmc-supply = <&vmmc1>;
|
vmmc-supply = <&vmmc1>;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
/* For debugging, it is often good idea to remove this GPIO.
|
|
||||||
It means you can remove back cover (to reboot by removing
|
|
||||||
battery) and still use the MMC card. */
|
|
||||||
cd-gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* most boards use vaux3, only some old versions use vmmc2 instead */
|
/* most boards use vaux3, only some old versions use vmmc2 instead */
|
||||||
|
|
|
@ -726,7 +726,7 @@ ocram-ecc@ffd08144 {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@fffef000 {
|
L2: cache-controller@fffef000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xfffef000 0x1000>;
|
reg = <0xfffef000 0x1000>;
|
||||||
interrupts = <0 38 0x04>;
|
interrupts = <0 38 0x04>;
|
||||||
|
|
|
@ -636,7 +636,7 @@ sdr: sdr@ffcfb100 {
|
||||||
reg = <0xffcfb100 0x80>;
|
reg = <0xffcfb100 0x80>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@fffff000 {
|
L2: cache-controller@fffff000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0xfffff000 0x1000>;
|
reg = <0xfffff000 0x1000>;
|
||||||
interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
|
@ -31,15 +31,6 @@
|
||||||
#if defined(__APCS_26__)
|
#if defined(__APCS_26__)
|
||||||
#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32
|
#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32
|
||||||
#endif
|
#endif
|
||||||
/*
|
|
||||||
* GCC 4.8.0-4.8.2: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854
|
|
||||||
* miscompiles find_get_entry(), and can result in EXT3 and EXT4
|
|
||||||
* filesystem corruption (possibly other FS too).
|
|
||||||
*/
|
|
||||||
#if defined(GCC_VERSION) && GCC_VERSION >= 40800 && GCC_VERSION < 40803
|
|
||||||
#error Your compiler is too buggy; it is known to miscompile kernels
|
|
||||||
#error and result in filesystem corruption and oopses.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -289,6 +289,6 @@ struct platform_device *__init imx_add_spi_imx(
|
||||||
const struct spi_imx_master *pdata);
|
const struct spi_imx_master *pdata);
|
||||||
|
|
||||||
struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase,
|
struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase,
|
||||||
int irq, int irq_err);
|
int irq);
|
||||||
struct platform_device *imx_add_imx_sdma(char *name,
|
struct platform_device *imx_add_imx_sdma(char *name,
|
||||||
resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
|
resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
|
||||||
|
|
|
@ -24,7 +24,8 @@ struct platform_device *__init mxc_register_gpio(char *name, int id,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
unsigned int nres;
|
||||||
|
|
||||||
return platform_device_register_resndata(&mxc_aips_bus,
|
nres = irq_high ? ARRAY_SIZE(res) : ARRAY_SIZE(res) - 1;
|
||||||
name, id, res, ARRAY_SIZE(res), NULL, 0);
|
return platform_device_register_resndata(&mxc_aips_bus, name, id, res, nres, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "devices-common.h"
|
#include "devices-common.h"
|
||||||
|
|
||||||
struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name,
|
struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name,
|
||||||
resource_size_t iobase, int irq, int irq_err)
|
resource_size_t iobase, int irq)
|
||||||
{
|
{
|
||||||
struct resource res[] = {
|
struct resource res[] = {
|
||||||
{
|
{
|
||||||
|
@ -17,10 +17,6 @@ struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name,
|
||||||
.start = irq,
|
.start = irq,
|
||||||
.end = irq,
|
.end = irq,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
}, {
|
|
||||||
.start = irq_err,
|
|
||||||
.end = irq_err,
|
|
||||||
.flags = IORESOURCE_IRQ,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -78,8 +78,7 @@ void __init imx21_soc_init(void)
|
||||||
mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
|
||||||
|
|
||||||
pinctrl_provide_dummies();
|
pinctrl_provide_dummies();
|
||||||
imx_add_imx_dma("imx21-dma", MX21_DMA_BASE_ADDR,
|
imx_add_imx_dma("imx21-dma", MX21_DMA_BASE_ADDR, MX21_INT_DMACH0);
|
||||||
MX21_INT_DMACH0, 0); /* No ERR irq */
|
|
||||||
platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res,
|
platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res,
|
||||||
ARRAY_SIZE(imx21_audmux_res));
|
ARRAY_SIZE(imx21_audmux_res));
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,8 +79,7 @@ void __init imx27_soc_init(void)
|
||||||
mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
|
||||||
|
|
||||||
pinctrl_provide_dummies();
|
pinctrl_provide_dummies();
|
||||||
imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR,
|
imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR, MX27_INT_DMACH0);
|
||||||
MX27_INT_DMACH0, 0); /* No ERR irq */
|
|
||||||
/* imx27 has the imx21 type audmux */
|
/* imx27 has the imx21 type audmux */
|
||||||
platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,
|
platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,
|
||||||
ARRAY_SIZE(imx27_audmux_res));
|
ARRAY_SIZE(imx27_audmux_res));
|
||||||
|
|
|
@ -3435,7 +3435,7 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
|
||||||
regs = ioremap(data->module_pa,
|
regs = ioremap(data->module_pa,
|
||||||
data->module_size);
|
data->module_size);
|
||||||
if (!regs)
|
if (!regs)
|
||||||
return -ENOMEM;
|
goto out_free_sysc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3445,13 +3445,13 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
|
||||||
if (oh->class->name && strcmp(oh->class->name, data->name)) {
|
if (oh->class->name && strcmp(oh->class->name, data->name)) {
|
||||||
class = kmemdup(oh->class, sizeof(*oh->class), GFP_KERNEL);
|
class = kmemdup(oh->class, sizeof(*oh->class), GFP_KERNEL);
|
||||||
if (!class)
|
if (!class)
|
||||||
return -ENOMEM;
|
goto out_unmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list_empty(&oh->slave_ports)) {
|
if (list_empty(&oh->slave_ports)) {
|
||||||
oi = kcalloc(1, sizeof(*oi), GFP_KERNEL);
|
oi = kcalloc(1, sizeof(*oi), GFP_KERNEL);
|
||||||
if (!oi)
|
if (!oi)
|
||||||
return -ENOMEM;
|
goto out_free_class;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note that we assume interconnect interface clocks will be
|
* Note that we assume interconnect interface clocks will be
|
||||||
|
@ -3478,6 +3478,14 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
|
||||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
out_free_class:
|
||||||
|
kfree(class);
|
||||||
|
out_unmap:
|
||||||
|
iounmap(regs);
|
||||||
|
out_free_sysc:
|
||||||
|
kfree(sysc);
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct omap_hwmod_reset omap24xx_reset_quirks[] = {
|
static const struct omap_hwmod_reset omap24xx_reset_quirks[] = {
|
||||||
|
|
|
@ -77,7 +77,7 @@ psci {
|
||||||
method = "smc";
|
method = "smc";
|
||||||
};
|
};
|
||||||
|
|
||||||
intc: intc@fffc1000 {
|
intc: interrupt-controller@fffc1000 {
|
||||||
compatible = "arm,gic-400", "arm,cortex-a15-gic";
|
compatible = "arm,gic-400", "arm,cortex-a15-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
@ -302,7 +302,7 @@ mmc: dwmmc0@ff808000 {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
nand: nand@ffb90000 {
|
nand: nand-controller@ffb90000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "altr,socfpga-denali-nand";
|
compatible = "altr,socfpga-denali-nand";
|
||||||
|
@ -445,7 +445,7 @@ timer3: timer3@ffd00100 {
|
||||||
clock-names = "timer";
|
clock-names = "timer";
|
||||||
};
|
};
|
||||||
|
|
||||||
uart0: serial0@ffc02000 {
|
uart0: serial@ffc02000 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0xffc02000 0x100>;
|
reg = <0xffc02000 0x100>;
|
||||||
interrupts = <0 108 4>;
|
interrupts = <0 108 4>;
|
||||||
|
@ -456,7 +456,7 @@ uart0: serial0@ffc02000 {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
uart1: serial1@ffc02100 {
|
uart1: serial@ffc02100 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0xffc02100 0x100>;
|
reg = <0xffc02100 0x100>;
|
||||||
interrupts = <0 109 4>;
|
interrupts = <0 109 4>;
|
||||||
|
|
|
@ -155,6 +155,7 @@ rtc@68 {
|
||||||
};
|
};
|
||||||
|
|
||||||
&qspi {
|
&qspi {
|
||||||
|
status = "okay";
|
||||||
flash@0 {
|
flash@0 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
|
@ -188,6 +188,7 @@ rtc@68 {
|
||||||
};
|
};
|
||||||
|
|
||||||
&qspi {
|
&qspi {
|
||||||
|
status = "okay";
|
||||||
flash@0 {
|
flash@0 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
@ -211,12 +212,12 @@ partitions {
|
||||||
|
|
||||||
qspi_boot: partition@0 {
|
qspi_boot: partition@0 {
|
||||||
label = "Boot and fpga data";
|
label = "Boot and fpga data";
|
||||||
reg = <0x0 0x034B0000>;
|
reg = <0x0 0x03FE0000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qspi_rootfs: partition@4000000 {
|
qspi_rootfs: partition@3FE0000 {
|
||||||
label = "Root Filesystem - JFFS2";
|
label = "Root Filesystem - JFFS2";
|
||||||
reg = <0x034B0000 0x0EB50000>;
|
reg = <0x03FE0000 0x0C020000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include <dt-bindings/input/input.h>
|
#include <dt-bindings/input/input.h>
|
||||||
#include <dt-bindings/sound/meson-aiu.h>
|
#include <dt-bindings/sound/meson-aiu.h>
|
||||||
|
|
||||||
#include "meson-gxl-s905x.dtsi"
|
#include "meson-gxl-s805x.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "libretech,aml-s805x-ac", "amlogic,s805x",
|
compatible = "libretech,aml-s805x-ac", "amlogic,s805x",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#include <dt-bindings/input/input.h>
|
#include <dt-bindings/input/input.h>
|
||||||
|
|
||||||
#include "meson-gxl-s905x.dtsi"
|
#include "meson-gxl-s805x.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "amlogic,p241", "amlogic,s805x", "amlogic,meson-gxl";
|
compatible = "amlogic,p241", "amlogic,s805x", "amlogic,meson-gxl";
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 BayLibre SAS
|
||||||
|
* Author: Neil Armstrong <narmstrong@baylibre.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "meson-gxl-s905x.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "amlogic,s805x", "amlogic,meson-gxl";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The S805X Package doesn't seem to handle the 744MHz OPP correctly */
|
||||||
|
&mali {
|
||||||
|
assigned-clocks = <&clkc CLKID_MALI_0_SEL>,
|
||||||
|
<&clkc CLKID_MALI_0>,
|
||||||
|
<&clkc CLKID_MALI>; /* Glitch free mux */
|
||||||
|
assigned-clock-parents = <&clkc CLKID_FCLK_DIV3>,
|
||||||
|
<0>, /* Do Nothing */
|
||||||
|
<&clkc CLKID_MALI_0>;
|
||||||
|
assigned-clock-rates = <0>, /* Do Nothing */
|
||||||
|
<666666666>,
|
||||||
|
<0>; /* Do Nothing */
|
||||||
|
};
|
|
@ -337,6 +337,11 @@ clkc: clock-controller {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&hwrng {
|
||||||
|
clocks = <&clkc CLKID_RNG0>;
|
||||||
|
clock-names = "core";
|
||||||
|
};
|
||||||
|
|
||||||
&i2c_A {
|
&i2c_A {
|
||||||
clocks = <&clkc CLKID_I2C>;
|
clocks = <&clkc CLKID_I2C>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -98,6 +98,7 @@ &watchdog0 {
|
||||||
};
|
};
|
||||||
|
|
||||||
&qspi {
|
&qspi {
|
||||||
|
status = "okay";
|
||||||
flash@0 {
|
flash@0 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
|
@ -194,7 +194,7 @@ CONFIG_HOTPLUG_PCI=y
|
||||||
CONFIG_HOTPLUG_PCI_ACPI=y
|
CONFIG_HOTPLUG_PCI_ACPI=y
|
||||||
CONFIG_PCI_AARDVARK=y
|
CONFIG_PCI_AARDVARK=y
|
||||||
CONFIG_PCI_TEGRA=y
|
CONFIG_PCI_TEGRA=y
|
||||||
CONFIG_PCIE_RCAR=y
|
CONFIG_PCIE_RCAR_HOST=y
|
||||||
CONFIG_PCI_HOST_GENERIC=y
|
CONFIG_PCI_HOST_GENERIC=y
|
||||||
CONFIG_PCI_XGENE=y
|
CONFIG_PCI_XGENE=y
|
||||||
CONFIG_PCIE_ALTERA=y
|
CONFIG_PCIE_ALTERA=y
|
||||||
|
|
|
@ -109,7 +109,7 @@ static inline u32 gic_read_pmr(void)
|
||||||
return read_sysreg_s(SYS_ICC_PMR_EL1);
|
return read_sysreg_s(SYS_ICC_PMR_EL1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gic_write_pmr(u32 val)
|
static __always_inline void gic_write_pmr(u32 val)
|
||||||
{
|
{
|
||||||
write_sysreg_s(val, SYS_ICC_PMR_EL1);
|
write_sysreg_s(val, SYS_ICC_PMR_EL1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ struct arch_timer_erratum_workaround {
|
||||||
u64 (*read_cntvct_el0)(void);
|
u64 (*read_cntvct_el0)(void);
|
||||||
int (*set_next_event_phys)(unsigned long, struct clock_event_device *);
|
int (*set_next_event_phys)(unsigned long, struct clock_event_device *);
|
||||||
int (*set_next_event_virt)(unsigned long, struct clock_event_device *);
|
int (*set_next_event_virt)(unsigned long, struct clock_event_device *);
|
||||||
|
bool disable_compat_vdso;
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_PER_CPU(const struct arch_timer_erratum_workaround *,
|
DECLARE_PER_CPU(const struct arch_timer_erratum_workaround *,
|
||||||
|
|
|
@ -675,7 +675,7 @@ static inline bool system_supports_generic_auth(void)
|
||||||
cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH);
|
cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool system_uses_irq_prio_masking(void)
|
static __always_inline bool system_uses_irq_prio_masking(void)
|
||||||
{
|
{
|
||||||
return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI) &&
|
return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI) &&
|
||||||
cpus_have_const_cap(ARM64_HAS_IRQ_PRIO_MASKING);
|
cpus_have_const_cap(ARM64_HAS_IRQ_PRIO_MASKING);
|
||||||
|
|
|
@ -109,6 +109,8 @@ void disable_debug_monitors(enum dbg_active_el el);
|
||||||
|
|
||||||
void user_rewind_single_step(struct task_struct *task);
|
void user_rewind_single_step(struct task_struct *task);
|
||||||
void user_fastforward_single_step(struct task_struct *task);
|
void user_fastforward_single_step(struct task_struct *task);
|
||||||
|
void user_regs_reset_single_step(struct user_pt_regs *regs,
|
||||||
|
struct task_struct *task);
|
||||||
|
|
||||||
void kernel_enable_single_step(struct pt_regs *regs);
|
void kernel_enable_single_step(struct pt_regs *regs);
|
||||||
void kernel_disable_single_step(void);
|
void kernel_disable_single_step(void);
|
||||||
|
|
|
@ -67,7 +67,7 @@ extern bool arm64_use_ng_mappings;
|
||||||
#define PAGE_HYP __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_HYP_XN)
|
#define PAGE_HYP __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_HYP_XN)
|
||||||
#define PAGE_HYP_EXEC __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY)
|
#define PAGE_HYP_EXEC __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY)
|
||||||
#define PAGE_HYP_RO __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY | PTE_HYP_XN)
|
#define PAGE_HYP_RO __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY | PTE_HYP_XN)
|
||||||
#define PAGE_HYP_DEVICE __pgprot(PROT_DEVICE_nGnRE | PTE_HYP)
|
#define PAGE_HYP_DEVICE __pgprot(_PROT_DEFAULT | PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_HYP | PTE_HYP_XN)
|
||||||
|
|
||||||
#define PAGE_S2_MEMATTR(attr) \
|
#define PAGE_S2_MEMATTR(attr) \
|
||||||
({ \
|
({ \
|
||||||
|
|
|
@ -34,6 +34,10 @@ static inline long syscall_get_error(struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long error = regs->regs[0];
|
unsigned long error = regs->regs[0];
|
||||||
|
|
||||||
|
if (is_compat_thread(task_thread_info(task)))
|
||||||
|
error = sign_extend64(error, 31);
|
||||||
|
|
||||||
return IS_ERR_VALUE(error) ? error : 0;
|
return IS_ERR_VALUE(error) ? error : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +51,13 @@ static inline void syscall_set_return_value(struct task_struct *task,
|
||||||
struct pt_regs *regs,
|
struct pt_regs *regs,
|
||||||
int error, long val)
|
int error, long val)
|
||||||
{
|
{
|
||||||
regs->regs[0] = (long) error ? error : val;
|
if (error)
|
||||||
|
val = error;
|
||||||
|
|
||||||
|
if (is_compat_thread(task_thread_info(task)))
|
||||||
|
val = lower_32_bits(val);
|
||||||
|
|
||||||
|
regs->regs[0] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SYSCALL_MAX_ARGS 6
|
#define SYSCALL_MAX_ARGS 6
|
||||||
|
|
|
@ -93,6 +93,7 @@ void arch_release_task_struct(struct task_struct *tsk);
|
||||||
#define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
|
#define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
|
||||||
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
||||||
#define _TIF_FSCHECK (1 << TIF_FSCHECK)
|
#define _TIF_FSCHECK (1 << TIF_FSCHECK)
|
||||||
|
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
|
||||||
#define _TIF_32BIT (1 << TIF_32BIT)
|
#define _TIF_32BIT (1 << TIF_32BIT)
|
||||||
#define _TIF_SVE (1 << TIF_SVE)
|
#define _TIF_SVE (1 << TIF_SVE)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
#ifndef __ASM_VDSOCLOCKSOURCE_H
|
#ifndef __ASM_VDSOCLOCKSOURCE_H
|
||||||
#define __ASM_VDSOCLOCKSOURCE_H
|
#define __ASM_VDSOCLOCKSOURCE_H
|
||||||
|
|
||||||
#define VDSO_ARCH_CLOCKMODES \
|
#define VDSO_ARCH_CLOCKMODES \
|
||||||
VDSO_CLOCKMODE_ARCHTIMER
|
/* vdso clocksource for both 32 and 64bit tasks */ \
|
||||||
|
VDSO_CLOCKMODE_ARCHTIMER, \
|
||||||
|
/* vdso clocksource for 64bit tasks only */ \
|
||||||
|
VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -111,7 +111,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
||||||
* update. Return something. Core will do another round and then
|
* update. Return something. Core will do another round and then
|
||||||
* see the mode change and fallback to the syscall.
|
* see the mode change and fallback to the syscall.
|
||||||
*/
|
*/
|
||||||
if (clock_mode == VDSO_CLOCKMODE_NONE)
|
if (clock_mode != VDSO_CLOCKMODE_ARCHTIMER)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -152,6 +152,12 @@ static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool vdso_clocksource_ok(const struct vdso_data *vd)
|
||||||
|
{
|
||||||
|
return vd->clock_mode == VDSO_CLOCKMODE_ARCHTIMER;
|
||||||
|
}
|
||||||
|
#define vdso_clocksource_ok vdso_clocksource_ok
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
|
#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
|
||||||
|
|
|
@ -43,20 +43,8 @@ bool alternative_is_applied(u16 cpufeature)
|
||||||
*/
|
*/
|
||||||
static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)
|
static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)
|
||||||
{
|
{
|
||||||
unsigned long replptr;
|
unsigned long replptr = (unsigned long)ALT_REPL_PTR(alt);
|
||||||
|
return !(pc >= replptr && pc <= (replptr + alt->alt_len));
|
||||||
if (kernel_text_address(pc))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
replptr = (unsigned long)ALT_REPL_PTR(alt);
|
|
||||||
if (pc >= replptr && pc <= (replptr + alt->alt_len))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Branching into *another* alternate sequence is doomed, and
|
|
||||||
* we're not even trying to fix it up.
|
|
||||||
*/
|
|
||||||
BUG();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1))
|
#define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1))
|
||||||
|
|
|
@ -782,6 +782,7 @@ static const struct midr_range erratum_1463225[] = {
|
||||||
MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1),
|
MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1),
|
||||||
/* Kryo4xx Gold (rcpe to rfpf) => (r0p0 to r3p1) */
|
/* Kryo4xx Gold (rcpe to rfpf) => (r0p0 to r3p1) */
|
||||||
MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xf),
|
MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xf),
|
||||||
|
{},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -141,17 +141,20 @@ postcore_initcall(debug_monitors_init);
|
||||||
/*
|
/*
|
||||||
* Single step API and exception handling.
|
* Single step API and exception handling.
|
||||||
*/
|
*/
|
||||||
static void set_regs_spsr_ss(struct pt_regs *regs)
|
static void set_user_regs_spsr_ss(struct user_pt_regs *regs)
|
||||||
{
|
{
|
||||||
regs->pstate |= DBG_SPSR_SS;
|
regs->pstate |= DBG_SPSR_SS;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(set_regs_spsr_ss);
|
NOKPROBE_SYMBOL(set_user_regs_spsr_ss);
|
||||||
|
|
||||||
static void clear_regs_spsr_ss(struct pt_regs *regs)
|
static void clear_user_regs_spsr_ss(struct user_pt_regs *regs)
|
||||||
{
|
{
|
||||||
regs->pstate &= ~DBG_SPSR_SS;
|
regs->pstate &= ~DBG_SPSR_SS;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(clear_regs_spsr_ss);
|
NOKPROBE_SYMBOL(clear_user_regs_spsr_ss);
|
||||||
|
|
||||||
|
#define set_regs_spsr_ss(r) set_user_regs_spsr_ss(&(r)->user_regs)
|
||||||
|
#define clear_regs_spsr_ss(r) clear_user_regs_spsr_ss(&(r)->user_regs)
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(debug_hook_lock);
|
static DEFINE_SPINLOCK(debug_hook_lock);
|
||||||
static LIST_HEAD(user_step_hook);
|
static LIST_HEAD(user_step_hook);
|
||||||
|
@ -391,17 +394,26 @@ void user_rewind_single_step(struct task_struct *task)
|
||||||
* If single step is active for this thread, then set SPSR.SS
|
* If single step is active for this thread, then set SPSR.SS
|
||||||
* to 1 to avoid returning to the active-pending state.
|
* to 1 to avoid returning to the active-pending state.
|
||||||
*/
|
*/
|
||||||
if (test_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP))
|
if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
|
||||||
set_regs_spsr_ss(task_pt_regs(task));
|
set_regs_spsr_ss(task_pt_regs(task));
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(user_rewind_single_step);
|
NOKPROBE_SYMBOL(user_rewind_single_step);
|
||||||
|
|
||||||
void user_fastforward_single_step(struct task_struct *task)
|
void user_fastforward_single_step(struct task_struct *task)
|
||||||
{
|
{
|
||||||
if (test_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP))
|
if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
|
||||||
clear_regs_spsr_ss(task_pt_regs(task));
|
clear_regs_spsr_ss(task_pt_regs(task));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void user_regs_reset_single_step(struct user_pt_regs *regs,
|
||||||
|
struct task_struct *task)
|
||||||
|
{
|
||||||
|
if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
|
||||||
|
set_user_regs_spsr_ss(regs);
|
||||||
|
else
|
||||||
|
clear_user_regs_spsr_ss(regs);
|
||||||
|
}
|
||||||
|
|
||||||
/* Kernel API */
|
/* Kernel API */
|
||||||
void kernel_enable_single_step(struct pt_regs *regs)
|
void kernel_enable_single_step(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,7 +57,7 @@ static void notrace el1_dbg(struct pt_regs *regs, unsigned long esr)
|
||||||
/*
|
/*
|
||||||
* The CPU masked interrupts, and we are leaving them masked during
|
* The CPU masked interrupts, and we are leaving them masked during
|
||||||
* do_debug_exception(). Update PMR as if we had called
|
* do_debug_exception(). Update PMR as if we had called
|
||||||
* local_mask_daif().
|
* local_daif_mask().
|
||||||
*/
|
*/
|
||||||
if (system_uses_irq_prio_masking())
|
if (system_uses_irq_prio_masking())
|
||||||
gic_write_pmr(GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET);
|
gic_write_pmr(GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET);
|
||||||
|
|
|
@ -126,8 +126,10 @@ alternative_else_nop_endif
|
||||||
add \dst, \dst, #(\sym - .entry.tramp.text)
|
add \dst, \dst, #(\sym - .entry.tramp.text)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
// This macro corrupts x0-x3. It is the caller's duty
|
/*
|
||||||
// to save/restore them if required.
|
* This macro corrupts x0-x3. It is the caller's duty to save/restore
|
||||||
|
* them if required.
|
||||||
|
*/
|
||||||
.macro apply_ssbd, state, tmp1, tmp2
|
.macro apply_ssbd, state, tmp1, tmp2
|
||||||
#ifdef CONFIG_ARM64_SSBD
|
#ifdef CONFIG_ARM64_SSBD
|
||||||
alternative_cb arm64_enable_wa2_handling
|
alternative_cb arm64_enable_wa2_handling
|
||||||
|
@ -167,13 +169,28 @@ alternative_cb_end
|
||||||
stp x28, x29, [sp, #16 * 14]
|
stp x28, x29, [sp, #16 * 14]
|
||||||
|
|
||||||
.if \el == 0
|
.if \el == 0
|
||||||
|
.if \regsize == 32
|
||||||
|
/*
|
||||||
|
* If we're returning from a 32-bit task on a system affected by
|
||||||
|
* 1418040 then re-enable userspace access to the virtual counter.
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_1418040
|
||||||
|
alternative_if ARM64_WORKAROUND_1418040
|
||||||
|
mrs x0, cntkctl_el1
|
||||||
|
orr x0, x0, #2 // ARCH_TIMER_USR_VCT_ACCESS_EN
|
||||||
|
msr cntkctl_el1, x0
|
||||||
|
alternative_else_nop_endif
|
||||||
|
#endif
|
||||||
|
.endif
|
||||||
clear_gp_regs
|
clear_gp_regs
|
||||||
mrs x21, sp_el0
|
mrs x21, sp_el0
|
||||||
ldr_this_cpu tsk, __entry_task, x20
|
ldr_this_cpu tsk, __entry_task, x20
|
||||||
msr sp_el0, tsk
|
msr sp_el0, tsk
|
||||||
|
|
||||||
// Ensure MDSCR_EL1.SS is clear, since we can unmask debug exceptions
|
/*
|
||||||
// when scheduling.
|
* Ensure MDSCR_EL1.SS is clear, since we can unmask debug exceptions
|
||||||
|
* when scheduling.
|
||||||
|
*/
|
||||||
ldr x19, [tsk, #TSK_TI_FLAGS]
|
ldr x19, [tsk, #TSK_TI_FLAGS]
|
||||||
disable_step_tsk x19, x20
|
disable_step_tsk x19, x20
|
||||||
|
|
||||||
|
@ -320,6 +337,14 @@ alternative_else_nop_endif
|
||||||
tst x22, #PSR_MODE32_BIT // native task?
|
tst x22, #PSR_MODE32_BIT // native task?
|
||||||
b.eq 3f
|
b.eq 3f
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_1418040
|
||||||
|
alternative_if ARM64_WORKAROUND_1418040
|
||||||
|
mrs x0, cntkctl_el1
|
||||||
|
bic x0, x0, #2 // ARCH_TIMER_USR_VCT_ACCESS_EN
|
||||||
|
msr cntkctl_el1, x0
|
||||||
|
alternative_else_nop_endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_845719
|
#ifdef CONFIG_ARM64_ERRATUM_845719
|
||||||
alternative_if ARM64_WORKAROUND_845719
|
alternative_if ARM64_WORKAROUND_845719
|
||||||
#ifdef CONFIG_PID_IN_CONTEXTIDR
|
#ifdef CONFIG_PID_IN_CONTEXTIDR
|
||||||
|
@ -331,21 +356,6 @@ alternative_if ARM64_WORKAROUND_845719
|
||||||
alternative_else_nop_endif
|
alternative_else_nop_endif
|
||||||
#endif
|
#endif
|
||||||
3:
|
3:
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_1418040
|
|
||||||
alternative_if_not ARM64_WORKAROUND_1418040
|
|
||||||
b 4f
|
|
||||||
alternative_else_nop_endif
|
|
||||||
/*
|
|
||||||
* if (x22.mode32 == cntkctl_el1.el0vcten)
|
|
||||||
* cntkctl_el1.el0vcten = ~cntkctl_el1.el0vcten
|
|
||||||
*/
|
|
||||||
mrs x1, cntkctl_el1
|
|
||||||
eon x0, x1, x22, lsr #3
|
|
||||||
tbz x0, #1, 4f
|
|
||||||
eor x1, x1, #2 // ARCH_TIMER_USR_VCT_ACCESS_EN
|
|
||||||
msr cntkctl_el1, x1
|
|
||||||
4:
|
|
||||||
#endif
|
|
||||||
scs_save tsk, x0
|
scs_save tsk, x0
|
||||||
|
|
||||||
/* No kernel C function calls after this as user keys are set. */
|
/* No kernel C function calls after this as user keys are set. */
|
||||||
|
@ -377,11 +387,11 @@ alternative_else_nop_endif
|
||||||
.if \el == 0
|
.if \el == 0
|
||||||
alternative_insn eret, nop, ARM64_UNMAP_KERNEL_AT_EL0
|
alternative_insn eret, nop, ARM64_UNMAP_KERNEL_AT_EL0
|
||||||
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
|
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
|
||||||
bne 5f
|
bne 4f
|
||||||
msr far_el1, x30
|
msr far_el1, x30
|
||||||
tramp_alias x30, tramp_exit_native
|
tramp_alias x30, tramp_exit_native
|
||||||
br x30
|
br x30
|
||||||
5:
|
4:
|
||||||
tramp_alias x30, tramp_exit_compat
|
tramp_alias x30, tramp_exit_compat
|
||||||
br x30
|
br x30
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -252,7 +252,7 @@ static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr)
|
||||||
if (!kgdb_single_step)
|
if (!kgdb_single_step)
|
||||||
return DBG_HOOK_ERROR;
|
return DBG_HOOK_ERROR;
|
||||||
|
|
||||||
kgdb_handle_exception(1, SIGTRAP, 0, regs);
|
kgdb_handle_exception(0, SIGTRAP, 0, regs);
|
||||||
return DBG_HOOK_HANDLED;
|
return DBG_HOOK_HANDLED;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(kgdb_step_brk_fn);
|
NOKPROBE_SYMBOL(kgdb_step_brk_fn);
|
||||||
|
|
|
@ -1811,19 +1811,42 @@ static void tracehook_report_syscall(struct pt_regs *regs,
|
||||||
unsigned long saved_reg;
|
unsigned long saved_reg;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A scratch register (ip(r12) on AArch32, x7 on AArch64) is
|
* We have some ABI weirdness here in the way that we handle syscall
|
||||||
* used to denote syscall entry/exit:
|
* exit stops because we indicate whether or not the stop has been
|
||||||
|
* signalled from syscall entry or syscall exit by clobbering a general
|
||||||
|
* purpose register (ip/r12 for AArch32, x7 for AArch64) in the tracee
|
||||||
|
* and restoring its old value after the stop. This means that:
|
||||||
|
*
|
||||||
|
* - Any writes by the tracer to this register during the stop are
|
||||||
|
* ignored/discarded.
|
||||||
|
*
|
||||||
|
* - The actual value of the register is not available during the stop,
|
||||||
|
* so the tracer cannot save it and restore it later.
|
||||||
|
*
|
||||||
|
* - Syscall stops behave differently to seccomp and pseudo-step traps
|
||||||
|
* (the latter do not nobble any registers).
|
||||||
*/
|
*/
|
||||||
regno = (is_compat_task() ? 12 : 7);
|
regno = (is_compat_task() ? 12 : 7);
|
||||||
saved_reg = regs->regs[regno];
|
saved_reg = regs->regs[regno];
|
||||||
regs->regs[regno] = dir;
|
regs->regs[regno] = dir;
|
||||||
|
|
||||||
if (dir == PTRACE_SYSCALL_EXIT)
|
if (dir == PTRACE_SYSCALL_ENTER) {
|
||||||
|
if (tracehook_report_syscall_entry(regs))
|
||||||
|
forget_syscall(regs);
|
||||||
|
regs->regs[regno] = saved_reg;
|
||||||
|
} else if (!test_thread_flag(TIF_SINGLESTEP)) {
|
||||||
tracehook_report_syscall_exit(regs, 0);
|
tracehook_report_syscall_exit(regs, 0);
|
||||||
else if (tracehook_report_syscall_entry(regs))
|
regs->regs[regno] = saved_reg;
|
||||||
forget_syscall(regs);
|
} else {
|
||||||
|
regs->regs[regno] = saved_reg;
|
||||||
|
|
||||||
regs->regs[regno] = saved_reg;
|
/*
|
||||||
|
* Signal a pseudo-step exception since we are stepping but
|
||||||
|
* tracer modifications to the registers may have rewound the
|
||||||
|
* state machine.
|
||||||
|
*/
|
||||||
|
tracehook_report_syscall_exit(regs, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int syscall_trace_enter(struct pt_regs *regs)
|
int syscall_trace_enter(struct pt_regs *regs)
|
||||||
|
@ -1833,12 +1856,12 @@ int syscall_trace_enter(struct pt_regs *regs)
|
||||||
if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {
|
if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {
|
||||||
tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
|
||||||
if (!in_syscall(regs) || (flags & _TIF_SYSCALL_EMU))
|
if (!in_syscall(regs) || (flags & _TIF_SYSCALL_EMU))
|
||||||
return -1;
|
return NO_SYSCALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do the secure computing after ptrace; failures should be fast. */
|
/* Do the secure computing after ptrace; failures should be fast. */
|
||||||
if (secure_computing() == -1)
|
if (secure_computing() == -1)
|
||||||
return -1;
|
return NO_SYSCALL;
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
||||||
trace_sys_enter(regs, regs->syscallno);
|
trace_sys_enter(regs, regs->syscallno);
|
||||||
|
@ -1851,12 +1874,14 @@ int syscall_trace_enter(struct pt_regs *regs)
|
||||||
|
|
||||||
void syscall_trace_exit(struct pt_regs *regs)
|
void syscall_trace_exit(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
unsigned long flags = READ_ONCE(current_thread_info()->flags);
|
||||||
|
|
||||||
audit_syscall_exit(regs);
|
audit_syscall_exit(regs);
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
|
if (flags & _TIF_SYSCALL_TRACEPOINT)
|
||||||
trace_sys_exit(regs, regs_return_value(regs));
|
trace_sys_exit(regs, regs_return_value(regs));
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SYSCALL_TRACE))
|
if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
|
||||||
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
|
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
|
||||||
|
|
||||||
rseq_syscall(regs);
|
rseq_syscall(regs);
|
||||||
|
@ -1934,8 +1959,8 @@ static int valid_native_regs(struct user_pt_regs *regs)
|
||||||
*/
|
*/
|
||||||
int valid_user_regs(struct user_pt_regs *regs, struct task_struct *task)
|
int valid_user_regs(struct user_pt_regs *regs, struct task_struct *task)
|
||||||
{
|
{
|
||||||
if (!test_tsk_thread_flag(task, TIF_SINGLESTEP))
|
/* https://lore.kernel.org/lkml/20191118131525.GA4180@willie-the-truck */
|
||||||
regs->pstate &= ~DBG_SPSR_SS;
|
user_regs_reset_single_step(regs, task);
|
||||||
|
|
||||||
if (is_compat_thread(task_thread_info(task)))
|
if (is_compat_thread(task_thread_info(task)))
|
||||||
return valid_compat_regs(regs);
|
return valid_compat_regs(regs);
|
||||||
|
|
|
@ -800,7 +800,6 @@ static void setup_restart_syscall(struct pt_regs *regs)
|
||||||
*/
|
*/
|
||||||
static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk = current;
|
|
||||||
sigset_t *oldset = sigmask_to_save();
|
sigset_t *oldset = sigmask_to_save();
|
||||||
int usig = ksig->sig;
|
int usig = ksig->sig;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -824,14 +823,8 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
||||||
*/
|
*/
|
||||||
ret |= !valid_user_regs(®s->user_regs, current);
|
ret |= !valid_user_regs(®s->user_regs, current);
|
||||||
|
|
||||||
/*
|
/* Step into the signal handler if we are stepping */
|
||||||
* Fast forward the stepping logic so we step into the signal
|
signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP));
|
||||||
* handler.
|
|
||||||
*/
|
|
||||||
if (!ret)
|
|
||||||
user_fastforward_single_step(tsk);
|
|
||||||
|
|
||||||
signal_setup_done(ret, ksig, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -50,6 +50,9 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
|
||||||
ret = do_ni_syscall(regs, scno);
|
ret = do_ni_syscall(regs, scno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_compat_task())
|
||||||
|
ret = lower_32_bits(ret);
|
||||||
|
|
||||||
regs->regs[0] = ret;
|
regs->regs[0] = ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +124,21 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
|
||||||
user_exit();
|
user_exit();
|
||||||
|
|
||||||
if (has_syscall_work(flags)) {
|
if (has_syscall_work(flags)) {
|
||||||
/* set default errno for user-issued syscall(-1) */
|
/*
|
||||||
|
* The de-facto standard way to skip a system call using ptrace
|
||||||
|
* is to set the system call to -1 (NO_SYSCALL) and set x0 to a
|
||||||
|
* suitable error code for consumption by userspace. However,
|
||||||
|
* this cannot be distinguished from a user-issued syscall(-1)
|
||||||
|
* and so we must set x0 to -ENOSYS here in case the tracer doesn't
|
||||||
|
* issue the skip and we fall into trace_exit with x0 preserved.
|
||||||
|
*
|
||||||
|
* This is slightly odd because it also means that if a tracer
|
||||||
|
* sets the system call number to -1 but does not initialise x0,
|
||||||
|
* then x0 will be preserved for all system calls apart from a
|
||||||
|
* user-issued syscall(-1). However, requesting a skip and not
|
||||||
|
* setting the return value is unlikely to do anything sensible
|
||||||
|
* anyway.
|
||||||
|
*/
|
||||||
if (scno == NO_SYSCALL)
|
if (scno == NO_SYSCALL)
|
||||||
regs->regs[0] = -ENOSYS;
|
regs->regs[0] = -ENOSYS;
|
||||||
scno = syscall_trace_enter(regs);
|
scno = syscall_trace_enter(regs);
|
||||||
|
@ -139,7 +156,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
|
||||||
if (!has_syscall_work(flags) && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) {
|
if (!has_syscall_work(flags) && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) {
|
||||||
local_daif_mask();
|
local_daif_mask();
|
||||||
flags = current_thread_info()->flags;
|
flags = current_thread_info()->flags;
|
||||||
if (!has_syscall_work(flags)) {
|
if (!has_syscall_work(flags) && !(flags & _TIF_SINGLESTEP)) {
|
||||||
/*
|
/*
|
||||||
* We're off to userspace, where interrupts are
|
* We're off to userspace, where interrupts are
|
||||||
* always enabled after we restore the flags from
|
* always enabled after we restore the flags from
|
||||||
|
|
|
@ -136,11 +136,15 @@ SYM_CODE_START(__kvm_handle_stub_hvc)
|
||||||
|
|
||||||
1: cmp x0, #HVC_RESET_VECTORS
|
1: cmp x0, #HVC_RESET_VECTORS
|
||||||
b.ne 1f
|
b.ne 1f
|
||||||
reset:
|
|
||||||
/*
|
/*
|
||||||
* Reset kvm back to the hyp stub. Do not clobber x0-x4 in
|
* Set the HVC_RESET_VECTORS return code before entering the common
|
||||||
* case we coming via HVC_SOFT_RESTART.
|
* path so that we do not clobber x0-x2 in case we are coming via
|
||||||
|
* HVC_SOFT_RESTART.
|
||||||
*/
|
*/
|
||||||
|
mov x0, xzr
|
||||||
|
reset:
|
||||||
|
/* Reset kvm back to the hyp stub. */
|
||||||
mrs x5, sctlr_el2
|
mrs x5, sctlr_el2
|
||||||
mov_q x6, SCTLR_ELx_FLAGS
|
mov_q x6, SCTLR_ELx_FLAGS
|
||||||
bic x5, x5, x6 // Clear SCTL_M and etc
|
bic x5, x5, x6 // Clear SCTL_M and etc
|
||||||
|
@ -151,7 +155,6 @@ reset:
|
||||||
/* Install stub vectors */
|
/* Install stub vectors */
|
||||||
adr_l x5, __hyp_stub_vectors
|
adr_l x5, __hyp_stub_vectors
|
||||||
msr vbar_el2, x5
|
msr vbar_el2, x5
|
||||||
mov x0, xzr
|
|
||||||
eret
|
eret
|
||||||
|
|
||||||
1: /* Bad stub call */
|
1: /* Bad stub call */
|
||||||
|
|
|
@ -159,7 +159,10 @@ static void kvm_vcpu_pmu_disable_el0(unsigned long events)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On VHE ensure that only guest events have EL0 counting enabled
|
* On VHE ensure that only guest events have EL0 counting enabled.
|
||||||
|
* This is called from both vcpu_{load,put} and the sysreg handling.
|
||||||
|
* Since the latter is preemptible, special care must be taken to
|
||||||
|
* disable preemption.
|
||||||
*/
|
*/
|
||||||
void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
|
void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
@ -169,12 +172,14 @@ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
|
||||||
if (!has_vhe())
|
if (!has_vhe())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
host = this_cpu_ptr(&kvm_host_data);
|
host = this_cpu_ptr(&kvm_host_data);
|
||||||
events_guest = host->pmu_events.events_guest;
|
events_guest = host->pmu_events.events_guest;
|
||||||
events_host = host->pmu_events.events_host;
|
events_host = host->pmu_events.events_host;
|
||||||
|
|
||||||
kvm_vcpu_pmu_enable_el0(events_guest);
|
kvm_vcpu_pmu_enable_el0(events_guest);
|
||||||
kvm_vcpu_pmu_disable_el0(events_host);
|
kvm_vcpu_pmu_disable_el0(events_host);
|
||||||
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <linux/arm-smccc.h>
|
#include <linux/arm-smccc.h>
|
||||||
#include <linux/kvm_host.h>
|
#include <linux/kvm_host.h>
|
||||||
|
#include <linux/sched/stat.h>
|
||||||
|
|
||||||
#include <asm/kvm_mmu.h>
|
#include <asm/kvm_mmu.h>
|
||||||
#include <asm/pvclock-abi.h>
|
#include <asm/pvclock-abi.h>
|
||||||
|
@ -73,6 +74,11 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool kvm_arm_pvtime_supported(void)
|
||||||
|
{
|
||||||
|
return !!sched_info_on();
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
|
int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
|
||||||
struct kvm_device_attr *attr)
|
struct kvm_device_attr *attr)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +88,8 @@ int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
if (attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
|
if (!kvm_arm_pvtime_supported() ||
|
||||||
|
attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
if (get_user(ipa, user))
|
if (get_user(ipa, user))
|
||||||
|
@ -110,7 +117,8 @@ int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
|
||||||
u64 __user *user = (u64 __user *)attr->addr;
|
u64 __user *user = (u64 __user *)attr->addr;
|
||||||
u64 ipa;
|
u64 ipa;
|
||||||
|
|
||||||
if (attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
|
if (!kvm_arm_pvtime_supported() ||
|
||||||
|
attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
ipa = vcpu->arch.steal.base;
|
ipa = vcpu->arch.steal.base;
|
||||||
|
@ -125,7 +133,8 @@ int kvm_arm_pvtime_has_attr(struct kvm_vcpu *vcpu,
|
||||||
{
|
{
|
||||||
switch (attr->attr) {
|
switch (attr->attr) {
|
||||||
case KVM_ARM_VCPU_PVTIME_IPA:
|
case KVM_ARM_VCPU_PVTIME_IPA:
|
||||||
return 0;
|
if (kvm_arm_pvtime_supported())
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,7 +245,7 @@ static int kvm_vcpu_enable_ptrauth(struct kvm_vcpu *vcpu)
|
||||||
*/
|
*/
|
||||||
int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
|
int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
int ret = -EINVAL;
|
int ret;
|
||||||
bool loaded;
|
bool loaded;
|
||||||
u32 pstate;
|
u32 pstate;
|
||||||
|
|
||||||
|
@ -269,15 +269,19 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
|
||||||
|
|
||||||
if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
|
if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
|
||||||
test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) {
|
test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) {
|
||||||
if (kvm_vcpu_enable_ptrauth(vcpu))
|
if (kvm_vcpu_enable_ptrauth(vcpu)) {
|
||||||
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (vcpu->arch.target) {
|
switch (vcpu->arch.target) {
|
||||||
default:
|
default:
|
||||||
if (test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features)) {
|
if (test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features)) {
|
||||||
if (!cpus_have_const_cap(ARM64_HAS_32BIT_EL1))
|
if (!cpus_have_const_cap(ARM64_HAS_32BIT_EL1)) {
|
||||||
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
pstate = VCPU_RESET_PSTATE_SVC;
|
pstate = VCPU_RESET_PSTATE_SVC;
|
||||||
} else {
|
} else {
|
||||||
pstate = VCPU_RESET_PSTATE_EL1;
|
pstate = VCPU_RESET_PSTATE_EL1;
|
||||||
|
|
|
@ -90,7 +90,15 @@ static irqreturn_t vgic_v4_doorbell_handler(int irq, void *info)
|
||||||
!irqd_irq_disabled(&irq_to_desc(irq)->irq_data))
|
!irqd_irq_disabled(&irq_to_desc(irq)->irq_data))
|
||||||
disable_irq_nosync(irq);
|
disable_irq_nosync(irq);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The v4.1 doorbell can fire concurrently with the vPE being
|
||||||
|
* made non-resident. Ensure we only update pending_last
|
||||||
|
* *after* the non-residency sequence has completed.
|
||||||
|
*/
|
||||||
|
raw_spin_lock(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe.vpe_lock);
|
||||||
vcpu->arch.vgic_cpu.vgic_v3.its_vpe.pending_last = true;
|
vcpu->arch.vgic_cpu.vgic_v3.its_vpe.pending_last = true;
|
||||||
|
raw_spin_unlock(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe.vpe_lock);
|
||||||
|
|
||||||
kvm_make_request(KVM_REQ_IRQ_PENDING, vcpu);
|
kvm_make_request(KVM_REQ_IRQ_PENDING, vcpu);
|
||||||
kvm_vcpu_kick(vcpu);
|
kvm_vcpu_kick(vcpu);
|
||||||
|
|
||||||
|
|
|
@ -19,15 +19,13 @@
|
||||||
\
|
\
|
||||||
/* \
|
/* \
|
||||||
* We can't unroll if the number of iterations isn't \
|
* We can't unroll if the number of iterations isn't \
|
||||||
* compile-time constant. Unfortunately GCC versions \
|
* compile-time constant. Unfortunately clang versions \
|
||||||
* up until 4.6 tend to miss obvious constants & cause \
|
* up until 8.0 tend to miss obvious constants & cause \
|
||||||
* this check to fail, even though they go on to \
|
* this check to fail, even though they go on to \
|
||||||
* generate reasonable code for the switch statement, \
|
* generate reasonable code for the switch statement, \
|
||||||
* so we skip the sanity check for those compilers. \
|
* so we skip the sanity check for those compilers. \
|
||||||
*/ \
|
*/ \
|
||||||
BUILD_BUG_ON((CONFIG_GCC_VERSION >= 40700 || \
|
BUILD_BUG_ON(!__builtin_constant_p(times)); \
|
||||||
CONFIG_CLANG_VERSION >= 80000) && \
|
|
||||||
!__builtin_constant_p(times)); \
|
|
||||||
\
|
\
|
||||||
switch (times) { \
|
switch (times) { \
|
||||||
case 32: fn(__VA_ARGS__); /* fall through */ \
|
case 32: fn(__VA_ARGS__); /* fall through */ \
|
||||||
|
|
|
@ -1722,6 +1722,7 @@ enum emulation_result kvm_mips_emulate_store(union mips_instruction inst,
|
||||||
vcpu->arch.gprs[rt], *(u32 *)data);
|
vcpu->arch.gprs[rt], *(u32 *)data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if defined(CONFIG_64BIT) && defined(CONFIG_KVM_MIPS_VZ)
|
||||||
case sdl_op:
|
case sdl_op:
|
||||||
run->mmio.phys_addr = kvm_mips_callbacks->gva_to_gpa(
|
run->mmio.phys_addr = kvm_mips_callbacks->gva_to_gpa(
|
||||||
vcpu->arch.host_cp0_badvaddr) & (~0x7);
|
vcpu->arch.host_cp0_badvaddr) & (~0x7);
|
||||||
|
@ -1815,6 +1816,7 @@ enum emulation_result kvm_mips_emulate_store(union mips_instruction inst,
|
||||||
vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr,
|
vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr,
|
||||||
vcpu->arch.gprs[rt], *(u64 *)data);
|
vcpu->arch.gprs[rt], *(u64 *)data);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_LOONGSON64
|
#ifdef CONFIG_CPU_LOONGSON64
|
||||||
case sdc2_op:
|
case sdc2_op:
|
||||||
|
@ -2002,6 +2004,7 @@ enum emulation_result kvm_mips_emulate_load(union mips_instruction inst,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if defined(CONFIG_64BIT) && defined(CONFIG_KVM_MIPS_VZ)
|
||||||
case ldl_op:
|
case ldl_op:
|
||||||
run->mmio.phys_addr = kvm_mips_callbacks->gva_to_gpa(
|
run->mmio.phys_addr = kvm_mips_callbacks->gva_to_gpa(
|
||||||
vcpu->arch.host_cp0_badvaddr) & (~0x7);
|
vcpu->arch.host_cp0_badvaddr) & (~0x7);
|
||||||
|
@ -2073,6 +2076,7 @@ enum emulation_result kvm_mips_emulate_load(union mips_instruction inst,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_LOONGSON64
|
#ifdef CONFIG_CPU_LOONGSON64
|
||||||
case ldc2_op:
|
case ldc2_op:
|
||||||
|
|
|
@ -627,9 +627,10 @@ static int bridge_probe(struct platform_device *pdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
|
domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
|
||||||
&bridge_domain_ops, NULL);
|
&bridge_domain_ops, NULL);
|
||||||
irq_domain_free_fwnode(fn);
|
if (!domain) {
|
||||||
if (!domain)
|
irq_domain_free_fwnode(fn);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
pci_set_flags(PCI_PROBE_ONLY);
|
pci_set_flags(PCI_PROBE_ONLY);
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,8 @@ struct coprocessor_completion_block {
|
||||||
#define CSB_CC_CHAIN (37)
|
#define CSB_CC_CHAIN (37)
|
||||||
#define CSB_CC_SEQUENCE (38)
|
#define CSB_CC_SEQUENCE (38)
|
||||||
#define CSB_CC_HW (39)
|
#define CSB_CC_HW (39)
|
||||||
|
/* P9 DD2 NX Workbook 3.2 (Table 4-36): Address translation fault */
|
||||||
|
#define CSB_CC_FAULT_ADDRESS (250)
|
||||||
|
|
||||||
#define CSB_SIZE (0x10)
|
#define CSB_SIZE (0x10)
|
||||||
#define CSB_ALIGN CSB_SIZE
|
#define CSB_ALIGN CSB_SIZE
|
||||||
|
|
|
@ -2551,7 +2551,7 @@ EXC_VIRT_NONE(0x5400, 0x100)
|
||||||
INT_DEFINE_BEGIN(denorm_exception)
|
INT_DEFINE_BEGIN(denorm_exception)
|
||||||
IVEC=0x1500
|
IVEC=0x1500
|
||||||
IHSRR=1
|
IHSRR=1
|
||||||
IBRANCH_COMMON=0
|
IBRANCH_TO_COMMON=0
|
||||||
IKVM_REAL=1
|
IKVM_REAL=1
|
||||||
INT_DEFINE_END(denorm_exception)
|
INT_DEFINE_END(denorm_exception)
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ static void *__init alloc_shared_lppaca(unsigned long size, unsigned long align,
|
||||||
* This is very early in boot, so no harm done if the kernel crashes at
|
* This is very early in boot, so no harm done if the kernel crashes at
|
||||||
* this point.
|
* this point.
|
||||||
*/
|
*/
|
||||||
BUG_ON(shared_lppaca_size >= shared_lppaca_total_size);
|
BUG_ON(shared_lppaca_size > shared_lppaca_total_size);
|
||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -354,12 +354,14 @@ static bool pkey_access_permitted(int pkey, bool write, bool execute)
|
||||||
u64 amr;
|
u64 amr;
|
||||||
|
|
||||||
pkey_shift = pkeyshift(pkey);
|
pkey_shift = pkeyshift(pkey);
|
||||||
if (execute && !(read_iamr() & (IAMR_EX_BIT << pkey_shift)))
|
if (execute)
|
||||||
return true;
|
return !(read_iamr() & (IAMR_EX_BIT << pkey_shift));
|
||||||
|
|
||||||
amr = read_amr(); /* Delay reading amr until absolutely needed */
|
amr = read_amr();
|
||||||
return ((!write && !(amr & (AMR_RD_BIT << pkey_shift))) ||
|
if (write)
|
||||||
(write && !(amr & (AMR_WR_BIT << pkey_shift))));
|
return !(amr & (AMR_WR_BIT << pkey_shift));
|
||||||
|
|
||||||
|
return !(amr & (AMR_RD_BIT << pkey_shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool arch_pte_access_permitted(u64 pte, bool write, bool execute)
|
bool arch_pte_access_permitted(u64 pte, bool write, bool execute)
|
||||||
|
|
|
@ -79,7 +79,7 @@ static void update_csb(struct vas_window *window,
|
||||||
csb_addr = (void __user *)be64_to_cpu(crb->csb_addr);
|
csb_addr = (void __user *)be64_to_cpu(crb->csb_addr);
|
||||||
|
|
||||||
memset(&csb, 0, sizeof(csb));
|
memset(&csb, 0, sizeof(csb));
|
||||||
csb.cc = CSB_CC_TRANSLATION;
|
csb.cc = CSB_CC_FAULT_ADDRESS;
|
||||||
csb.ce = CSB_CE_TERMINATION;
|
csb.ce = CSB_CE_TERMINATION;
|
||||||
csb.cs = 0;
|
csb.cs = 0;
|
||||||
csb.count = 0;
|
csb.count = 0;
|
||||||
|
|
|
@ -23,6 +23,8 @@ config RISCV
|
||||||
select ARCH_HAS_SET_DIRECT_MAP
|
select ARCH_HAS_SET_DIRECT_MAP
|
||||||
select ARCH_HAS_SET_MEMORY
|
select ARCH_HAS_SET_MEMORY
|
||||||
select ARCH_HAS_STRICT_KERNEL_RWX if MMU
|
select ARCH_HAS_STRICT_KERNEL_RWX if MMU
|
||||||
|
select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
|
||||||
|
select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
|
||||||
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
|
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
|
||||||
select ARCH_WANT_FRAME_POINTERS
|
select ARCH_WANT_FRAME_POINTERS
|
||||||
select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
|
select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
|
||||||
|
|
|
@ -58,8 +58,16 @@ do { \
|
||||||
* The AQ/RL pair provides a RCpc critical section, but there's not really any
|
* The AQ/RL pair provides a RCpc critical section, but there's not really any
|
||||||
* way we can take advantage of that here because the ordering is only enforced
|
* way we can take advantage of that here because the ordering is only enforced
|
||||||
* on that one lock. Thus, we're just doing a full fence.
|
* on that one lock. Thus, we're just doing a full fence.
|
||||||
|
*
|
||||||
|
* Since we allow writeX to be called from preemptive regions we need at least
|
||||||
|
* an "o" in the predecessor set to ensure device writes are visible before the
|
||||||
|
* task is marked as available for scheduling on a new hart. While I don't see
|
||||||
|
* any concrete reason we need a full IO fence, it seems safer to just upgrade
|
||||||
|
* this in order to avoid any IO crossing a scheduling boundary. In both
|
||||||
|
* instances the scheduler pairs this with an mb(), so nothing is necessary on
|
||||||
|
* the new hart.
|
||||||
*/
|
*/
|
||||||
#define smp_mb__after_spinlock() RISCV_FENCE(rw,rw)
|
#define smp_mb__after_spinlock() RISCV_FENCE(iorw,iorw)
|
||||||
|
|
||||||
#include <asm-generic/barrier.h>
|
#include <asm-generic/barrier.h>
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,7 @@
|
||||||
#ifndef __ASM_GDB_XML_H_
|
#ifndef __ASM_GDB_XML_H_
|
||||||
#define __ASM_GDB_XML_H_
|
#define __ASM_GDB_XML_H_
|
||||||
|
|
||||||
#define kgdb_arch_gdb_stub_feature riscv_gdb_stub_feature
|
const char riscv_gdb_stub_feature[64] =
|
||||||
static const char riscv_gdb_stub_feature[64] =
|
|
||||||
"PacketSize=800;qXfer:features:read+;";
|
"PacketSize=800;qXfer:features:read+;";
|
||||||
|
|
||||||
static const char gdb_xfer_read_target[31] = "qXfer:features:read:target.xml:";
|
static const char gdb_xfer_read_target[31] = "qXfer:features:read:target.xml:";
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
extern int kgdb_has_hit_break(unsigned long addr);
|
|
||||||
extern unsigned long kgdb_compiled_break;
|
extern unsigned long kgdb_compiled_break;
|
||||||
|
|
||||||
static inline void arch_kgdb_breakpoint(void)
|
static inline void arch_kgdb_breakpoint(void)
|
||||||
|
@ -106,7 +105,9 @@ static inline void arch_kgdb_breakpoint(void)
|
||||||
#define DBG_REG_BADADDR_OFF 34
|
#define DBG_REG_BADADDR_OFF 34
|
||||||
#define DBG_REG_CAUSE_OFF 35
|
#define DBG_REG_CAUSE_OFF 35
|
||||||
|
|
||||||
#include <asm/gdb_xml.h>
|
extern const char riscv_gdb_stub_feature[64];
|
||||||
|
|
||||||
|
#define kgdb_arch_gdb_stub_feature riscv_gdb_stub_feature
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,7 +12,11 @@
|
||||||
#include <linux/const.h>
|
#include <linux/const.h>
|
||||||
|
|
||||||
/* thread information allocation */
|
/* thread information allocation */
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
#define THREAD_SIZE_ORDER (2)
|
||||||
|
#else
|
||||||
#define THREAD_SIZE_ORDER (1)
|
#define THREAD_SIZE_ORDER (1)
|
||||||
|
#endif
|
||||||
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
|
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
|
@ -44,18 +44,18 @@ DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ)
|
||||||
DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)
|
DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)
|
||||||
DECLARE_INSN(sret, MATCH_SRET, MASK_SRET)
|
DECLARE_INSN(sret, MATCH_SRET, MASK_SRET)
|
||||||
|
|
||||||
int decode_register_index(unsigned long opcode, int offset)
|
static int decode_register_index(unsigned long opcode, int offset)
|
||||||
{
|
{
|
||||||
return (opcode >> offset) & 0x1F;
|
return (opcode >> offset) & 0x1F;
|
||||||
}
|
}
|
||||||
|
|
||||||
int decode_register_index_short(unsigned long opcode, int offset)
|
static int decode_register_index_short(unsigned long opcode, int offset)
|
||||||
{
|
{
|
||||||
return ((opcode >> offset) & 0x7) + 8;
|
return ((opcode >> offset) & 0x7) + 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate the new address for after a step */
|
/* Calculate the new address for after a step */
|
||||||
int get_step_address(struct pt_regs *regs, unsigned long *next_addr)
|
static int get_step_address(struct pt_regs *regs, unsigned long *next_addr)
|
||||||
{
|
{
|
||||||
unsigned long pc = regs->epc;
|
unsigned long pc = regs->epc;
|
||||||
unsigned long *regs_ptr = (unsigned long *)regs;
|
unsigned long *regs_ptr = (unsigned long *)regs;
|
||||||
|
@ -136,7 +136,7 @@ int get_step_address(struct pt_regs *regs, unsigned long *next_addr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_single_step(struct pt_regs *regs)
|
static int do_single_step(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/* Determine where the target instruction will send us to */
|
/* Determine where the target instruction will send us to */
|
||||||
unsigned long addr = 0;
|
unsigned long addr = 0;
|
||||||
|
@ -320,7 +320,7 @@ int kgdb_arch_handle_exception(int vector, int signo, int err_code,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int kgdb_riscv_kgdbbreak(unsigned long addr)
|
static int kgdb_riscv_kgdbbreak(unsigned long addr)
|
||||||
{
|
{
|
||||||
if (stepped_address == addr)
|
if (stepped_address == addr)
|
||||||
return KGDB_SW_SINGLE_STEP;
|
return KGDB_SW_SINGLE_STEP;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_WATCH_QUEUE=y
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
CONFIG_NO_HZ_IDLE=y
|
CONFIG_NO_HZ_IDLE=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
@ -14,7 +15,6 @@ CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_NUMA_BALANCING=y
|
CONFIG_NUMA_BALANCING=y
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_MEMCG_SWAP=y
|
|
||||||
CONFIG_BLK_CGROUP=y
|
CONFIG_BLK_CGROUP=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
CONFIG_RT_GROUP_SCHED=y
|
||||||
|
@ -31,9 +31,9 @@ CONFIG_NAMESPACES=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
CONFIG_CHECKPOINT_RESTORE=y
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
CONFIG_SCHED_AUTOGROUP=y
|
CONFIG_SCHED_AUTOGROUP=y
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_EXPERT=y
|
CONFIG_EXPERT=y
|
||||||
# CONFIG_SYSFS_SYSCALL is not set
|
# CONFIG_SYSFS_SYSCALL is not set
|
||||||
|
CONFIG_BPF_LSM=y
|
||||||
CONFIG_BPF_SYSCALL=y
|
CONFIG_BPF_SYSCALL=y
|
||||||
CONFIG_USERFAULTFD=y
|
CONFIG_USERFAULTFD=y
|
||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
|
@ -51,14 +51,11 @@ CONFIG_CHSC_SCH=y
|
||||||
CONFIG_VFIO_CCW=m
|
CONFIG_VFIO_CCW=m
|
||||||
CONFIG_VFIO_AP=m
|
CONFIG_VFIO_AP=m
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
CONFIG_HIBERNATION=y
|
|
||||||
CONFIG_PM_DEBUG=y
|
|
||||||
CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
|
CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
|
||||||
CONFIG_CMM=m
|
CONFIG_CMM=m
|
||||||
CONFIG_APPLDATA_BASE=y
|
CONFIG_APPLDATA_BASE=y
|
||||||
CONFIG_KVM=m
|
CONFIG_KVM=m
|
||||||
CONFIG_VHOST_NET=m
|
CONFIG_S390_UNWIND_SELFTEST=y
|
||||||
CONFIG_VHOST_VSOCK=m
|
|
||||||
CONFIG_OPROFILE=m
|
CONFIG_OPROFILE=m
|
||||||
CONFIG_KPROBES=y
|
CONFIG_KPROBES=y
|
||||||
CONFIG_JUMP_LABEL=y
|
CONFIG_JUMP_LABEL=y
|
||||||
|
@ -77,6 +74,8 @@ CONFIG_BLK_DEV_THROTTLING=y
|
||||||
CONFIG_BLK_WBT=y
|
CONFIG_BLK_WBT=y
|
||||||
CONFIG_BLK_CGROUP_IOLATENCY=y
|
CONFIG_BLK_CGROUP_IOLATENCY=y
|
||||||
CONFIG_BLK_CGROUP_IOCOST=y
|
CONFIG_BLK_CGROUP_IOCOST=y
|
||||||
|
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||||
|
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_IBM_PARTITION=y
|
CONFIG_IBM_PARTITION=y
|
||||||
CONFIG_BSD_DISKLABEL=y
|
CONFIG_BSD_DISKLABEL=y
|
||||||
|
@ -96,7 +95,6 @@ CONFIG_CMA_DEBUG=y
|
||||||
CONFIG_CMA_DEBUGFS=y
|
CONFIG_CMA_DEBUGFS=y
|
||||||
CONFIG_MEM_SOFT_DIRTY=y
|
CONFIG_MEM_SOFT_DIRTY=y
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZBUD=m
|
|
||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||||
|
@ -130,6 +128,7 @@ CONFIG_SYN_COOKIES=y
|
||||||
CONFIG_NET_IPVTI=m
|
CONFIG_NET_IPVTI=m
|
||||||
CONFIG_INET_AH=m
|
CONFIG_INET_AH=m
|
||||||
CONFIG_INET_ESP=m
|
CONFIG_INET_ESP=m
|
||||||
|
CONFIG_INET_ESPINTCP=y
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_DIAG=m
|
CONFIG_INET_DIAG=m
|
||||||
CONFIG_INET_UDP_DIAG=m
|
CONFIG_INET_UDP_DIAG=m
|
||||||
|
@ -144,6 +143,7 @@ CONFIG_TCP_CONG_ILLINOIS=m
|
||||||
CONFIG_IPV6_ROUTER_PREF=y
|
CONFIG_IPV6_ROUTER_PREF=y
|
||||||
CONFIG_INET6_AH=m
|
CONFIG_INET6_AH=m
|
||||||
CONFIG_INET6_ESP=m
|
CONFIG_INET6_ESP=m
|
||||||
|
CONFIG_INET6_ESPINTCP=y
|
||||||
CONFIG_INET6_IPCOMP=m
|
CONFIG_INET6_IPCOMP=m
|
||||||
CONFIG_IPV6_MIP6=m
|
CONFIG_IPV6_MIP6=m
|
||||||
CONFIG_IPV6_VTI=m
|
CONFIG_IPV6_VTI=m
|
||||||
|
@ -151,7 +151,10 @@ CONFIG_IPV6_SIT=m
|
||||||
CONFIG_IPV6_GRE=m
|
CONFIG_IPV6_GRE=m
|
||||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||||
CONFIG_IPV6_SUBTREES=y
|
CONFIG_IPV6_SUBTREES=y
|
||||||
|
CONFIG_IPV6_RPL_LWTUNNEL=y
|
||||||
|
CONFIG_MPTCP=y
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
|
CONFIG_BRIDGE_NETFILTER=m
|
||||||
CONFIG_NF_CONNTRACK=m
|
CONFIG_NF_CONNTRACK=m
|
||||||
CONFIG_NF_CONNTRACK_SECMARK=y
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
|
@ -317,6 +320,7 @@ CONFIG_L2TP_V3=y
|
||||||
CONFIG_L2TP_IP=m
|
CONFIG_L2TP_IP=m
|
||||||
CONFIG_L2TP_ETH=m
|
CONFIG_L2TP_ETH=m
|
||||||
CONFIG_BRIDGE=m
|
CONFIG_BRIDGE=m
|
||||||
|
CONFIG_BRIDGE_MRP=y
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
CONFIG_VLAN_8021Q_GVRP=y
|
CONFIG_VLAN_8021Q_GVRP=y
|
||||||
CONFIG_NET_SCHED=y
|
CONFIG_NET_SCHED=y
|
||||||
|
@ -341,6 +345,7 @@ CONFIG_NET_SCH_CODEL=m
|
||||||
CONFIG_NET_SCH_FQ_CODEL=m
|
CONFIG_NET_SCH_FQ_CODEL=m
|
||||||
CONFIG_NET_SCH_INGRESS=m
|
CONFIG_NET_SCH_INGRESS=m
|
||||||
CONFIG_NET_SCH_PLUG=m
|
CONFIG_NET_SCH_PLUG=m
|
||||||
|
CONFIG_NET_SCH_ETS=m
|
||||||
CONFIG_NET_CLS_BASIC=m
|
CONFIG_NET_CLS_BASIC=m
|
||||||
CONFIG_NET_CLS_TCINDEX=m
|
CONFIG_NET_CLS_TCINDEX=m
|
||||||
CONFIG_NET_CLS_ROUTE4=m
|
CONFIG_NET_CLS_ROUTE4=m
|
||||||
|
@ -364,6 +369,7 @@ CONFIG_NET_ACT_PEDIT=m
|
||||||
CONFIG_NET_ACT_SIMP=m
|
CONFIG_NET_ACT_SIMP=m
|
||||||
CONFIG_NET_ACT_SKBEDIT=m
|
CONFIG_NET_ACT_SKBEDIT=m
|
||||||
CONFIG_NET_ACT_CSUM=m
|
CONFIG_NET_ACT_CSUM=m
|
||||||
|
CONFIG_NET_ACT_GATE=m
|
||||||
CONFIG_DNS_RESOLVER=y
|
CONFIG_DNS_RESOLVER=y
|
||||||
CONFIG_OPENVSWITCH=m
|
CONFIG_OPENVSWITCH=m
|
||||||
CONFIG_VSOCKETS=m
|
CONFIG_VSOCKETS=m
|
||||||
|
@ -374,6 +380,7 @@ CONFIG_BPF_JIT=y
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
# CONFIG_NET_DROP_MONITOR is not set
|
# CONFIG_NET_DROP_MONITOR is not set
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
|
# CONFIG_PCIEASPM is not set
|
||||||
CONFIG_PCI_DEBUG=y
|
CONFIG_PCI_DEBUG=y
|
||||||
CONFIG_HOTPLUG_PCI=y
|
CONFIG_HOTPLUG_PCI=y
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
|
@ -435,6 +442,7 @@ CONFIG_DM_ZERO=m
|
||||||
CONFIG_DM_MULTIPATH=m
|
CONFIG_DM_MULTIPATH=m
|
||||||
CONFIG_DM_MULTIPATH_QL=m
|
CONFIG_DM_MULTIPATH_QL=m
|
||||||
CONFIG_DM_MULTIPATH_ST=m
|
CONFIG_DM_MULTIPATH_ST=m
|
||||||
|
CONFIG_DM_MULTIPATH_HST=m
|
||||||
CONFIG_DM_DELAY=m
|
CONFIG_DM_DELAY=m
|
||||||
CONFIG_DM_UEVENT=y
|
CONFIG_DM_UEVENT=y
|
||||||
CONFIG_DM_FLAKEY=m
|
CONFIG_DM_FLAKEY=m
|
||||||
|
@ -448,6 +456,8 @@ CONFIG_EQUALIZER=m
|
||||||
CONFIG_IFB=m
|
CONFIG_IFB=m
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
|
CONFIG_VXLAN=m
|
||||||
|
CONFIG_BAREUDP=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
CONFIG_VIRTIO_NET=m
|
CONFIG_VIRTIO_NET=m
|
||||||
|
@ -481,7 +491,6 @@ CONFIG_NLMON=m
|
||||||
CONFIG_MLX4_EN=m
|
CONFIG_MLX4_EN=m
|
||||||
CONFIG_MLX5_CORE=m
|
CONFIG_MLX5_CORE=m
|
||||||
CONFIG_MLX5_CORE_EN=y
|
CONFIG_MLX5_CORE_EN=y
|
||||||
# CONFIG_MLXFW is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICREL is not set
|
# CONFIG_NET_VENDOR_MICREL is not set
|
||||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||||
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
||||||
|
@ -514,6 +523,7 @@ CONFIG_MLX5_CORE_EN=y
|
||||||
# CONFIG_NET_VENDOR_TI is not set
|
# CONFIG_NET_VENDOR_TI is not set
|
||||||
# CONFIG_NET_VENDOR_VIA is not set
|
# CONFIG_NET_VENDOR_VIA is not set
|
||||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||||
|
# CONFIG_NET_VENDOR_XILINX is not set
|
||||||
CONFIG_PPP=m
|
CONFIG_PPP=m
|
||||||
CONFIG_PPP_BSDCOMP=m
|
CONFIG_PPP_BSDCOMP=m
|
||||||
CONFIG_PPP_DEFLATE=m
|
CONFIG_PPP_DEFLATE=m
|
||||||
|
@ -561,6 +571,8 @@ CONFIG_VFIO_MDEV_DEVICE=m
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VIRTIO_INPUT=y
|
CONFIG_VIRTIO_INPUT=y
|
||||||
|
CONFIG_VHOST_NET=m
|
||||||
|
CONFIG_VHOST_VSOCK=m
|
||||||
CONFIG_S390_CCW_IOMMU=y
|
CONFIG_S390_CCW_IOMMU=y
|
||||||
CONFIG_S390_AP_IOMMU=y
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
|
@ -608,6 +620,7 @@ CONFIG_ZISOFS=y
|
||||||
CONFIG_UDF_FS=m
|
CONFIG_UDF_FS=m
|
||||||
CONFIG_MSDOS_FS=m
|
CONFIG_MSDOS_FS=m
|
||||||
CONFIG_VFAT_FS=m
|
CONFIG_VFAT_FS=m
|
||||||
|
CONFIG_EXFAT_FS=m
|
||||||
CONFIG_NTFS_FS=m
|
CONFIG_NTFS_FS=m
|
||||||
CONFIG_NTFS_RW=y
|
CONFIG_NTFS_RW=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
|
@ -650,8 +663,8 @@ CONFIG_NLS_UTF8=m
|
||||||
CONFIG_DLM=m
|
CONFIG_DLM=m
|
||||||
CONFIG_UNICODE=y
|
CONFIG_UNICODE=y
|
||||||
CONFIG_PERSISTENT_KEYRINGS=y
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
CONFIG_BIG_KEYS=y
|
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
|
CONFIG_KEY_NOTIFICATIONS=y
|
||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
CONFIG_SECURITY_NETWORK=y
|
CONFIG_SECURITY_NETWORK=y
|
||||||
CONFIG_FORTIFY_SOURCE=y
|
CONFIG_FORTIFY_SOURCE=y
|
||||||
|
@ -675,8 +688,11 @@ CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_DH=m
|
CONFIG_CRYPTO_DH=m
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_ECRDSA=m
|
CONFIG_CRYPTO_ECRDSA=m
|
||||||
|
CONFIG_CRYPTO_CURVE25519=m
|
||||||
|
CONFIG_CRYPTO_GCM=y
|
||||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
CONFIG_CRYPTO_AEGIS128=m
|
CONFIG_CRYPTO_AEGIS128=m
|
||||||
|
CONFIG_CRYPTO_SEQIV=y
|
||||||
CONFIG_CRYPTO_CFB=m
|
CONFIG_CRYPTO_CFB=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
|
@ -685,6 +701,7 @@ CONFIG_CRYPTO_ADIANTUM=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
CONFIG_CRYPTO_VMAC=m
|
||||||
CONFIG_CRYPTO_CRC32=m
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
CONFIG_CRYPTO_BLAKE2S=m
|
||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||||
CONFIG_CRYPTO_RMD128=m
|
CONFIG_CRYPTO_RMD128=m
|
||||||
CONFIG_CRYPTO_RMD160=m
|
CONFIG_CRYPTO_RMD160=m
|
||||||
|
@ -701,6 +718,7 @@ CONFIG_CRYPTO_BLOWFISH=m
|
||||||
CONFIG_CRYPTO_CAMELLIA=m
|
CONFIG_CRYPTO_CAMELLIA=m
|
||||||
CONFIG_CRYPTO_CAST5=m
|
CONFIG_CRYPTO_CAST5=m
|
||||||
CONFIG_CRYPTO_CAST6=m
|
CONFIG_CRYPTO_CAST6=m
|
||||||
|
CONFIG_CRYPTO_DES=m
|
||||||
CONFIG_CRYPTO_FCRYPT=m
|
CONFIG_CRYPTO_FCRYPT=m
|
||||||
CONFIG_CRYPTO_KHAZAD=m
|
CONFIG_CRYPTO_KHAZAD=m
|
||||||
CONFIG_CRYPTO_SALSA20=m
|
CONFIG_CRYPTO_SALSA20=m
|
||||||
|
@ -719,6 +737,9 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
CONFIG_CRYPTO_USER_API_AEAD=m
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
CONFIG_CRYPTO_STATS=y
|
CONFIG_CRYPTO_STATS=y
|
||||||
|
CONFIG_CRYPTO_LIB_BLAKE2S=m
|
||||||
|
CONFIG_CRYPTO_LIB_CURVE25519=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_PKEY=m
|
CONFIG_PKEY=m
|
||||||
CONFIG_CRYPTO_PAES_S390=m
|
CONFIG_CRYPTO_PAES_S390=m
|
||||||
|
@ -774,6 +795,7 @@ CONFIG_DEBUG_SHIRQ=y
|
||||||
CONFIG_PANIC_ON_OOPS=y
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
CONFIG_DETECT_HUNG_TASK=y
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
CONFIG_WQ_WATCHDOG=y
|
CONFIG_WQ_WATCHDOG=y
|
||||||
|
CONFIG_TEST_LOCKUP=m
|
||||||
CONFIG_DEBUG_TIMEKEEPING=y
|
CONFIG_DEBUG_TIMEKEEPING=y
|
||||||
CONFIG_PROVE_LOCKING=y
|
CONFIG_PROVE_LOCKING=y
|
||||||
CONFIG_LOCK_STAT=y
|
CONFIG_LOCK_STAT=y
|
||||||
|
@ -786,7 +808,9 @@ CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_DEBUG_CREDENTIALS=y
|
CONFIG_DEBUG_CREDENTIALS=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
||||||
|
# CONFIG_RCU_TRACE is not set
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
CONFIG_STACK_TRACER=y
|
CONFIG_STACK_TRACER=y
|
||||||
CONFIG_IRQSOFF_TRACER=y
|
CONFIG_IRQSOFF_TRACER=y
|
||||||
|
@ -808,10 +832,12 @@ CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_TEST_LIST_SORT=y
|
CONFIG_TEST_LIST_SORT=y
|
||||||
|
CONFIG_TEST_MIN_HEAP=y
|
||||||
CONFIG_TEST_SORT=y
|
CONFIG_TEST_SORT=y
|
||||||
CONFIG_KPROBES_SANITY_TEST=y
|
CONFIG_KPROBES_SANITY_TEST=y
|
||||||
CONFIG_RBTREE_TEST=y
|
CONFIG_RBTREE_TEST=y
|
||||||
CONFIG_INTERVAL_TREE_TEST=m
|
CONFIG_INTERVAL_TREE_TEST=m
|
||||||
CONFIG_PERCPU_TEST=m
|
CONFIG_PERCPU_TEST=m
|
||||||
CONFIG_ATOMIC64_SELFTEST=y
|
CONFIG_ATOMIC64_SELFTEST=y
|
||||||
|
CONFIG_TEST_BITOPS=m
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_WATCH_QUEUE=y
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
CONFIG_NO_HZ_IDLE=y
|
CONFIG_NO_HZ_IDLE=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
@ -13,7 +14,6 @@ CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_NUMA_BALANCING=y
|
CONFIG_NUMA_BALANCING=y
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_MEMCG_SWAP=y
|
|
||||||
CONFIG_BLK_CGROUP=y
|
CONFIG_BLK_CGROUP=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
CONFIG_RT_GROUP_SCHED=y
|
||||||
|
@ -30,9 +30,9 @@ CONFIG_NAMESPACES=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
CONFIG_CHECKPOINT_RESTORE=y
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
CONFIG_SCHED_AUTOGROUP=y
|
CONFIG_SCHED_AUTOGROUP=y
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_EXPERT=y
|
CONFIG_EXPERT=y
|
||||||
# CONFIG_SYSFS_SYSCALL is not set
|
# CONFIG_SYSFS_SYSCALL is not set
|
||||||
|
CONFIG_BPF_LSM=y
|
||||||
CONFIG_BPF_SYSCALL=y
|
CONFIG_BPF_SYSCALL=y
|
||||||
CONFIG_USERFAULTFD=y
|
CONFIG_USERFAULTFD=y
|
||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
|
@ -41,7 +41,6 @@ CONFIG_LIVEPATCH=y
|
||||||
CONFIG_TUNE_ZEC12=y
|
CONFIG_TUNE_ZEC12=y
|
||||||
CONFIG_NR_CPUS=512
|
CONFIG_NR_CPUS=512
|
||||||
CONFIG_NUMA=y
|
CONFIG_NUMA=y
|
||||||
# CONFIG_NUMA_EMU is not set
|
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
CONFIG_KEXEC_FILE=y
|
CONFIG_KEXEC_FILE=y
|
||||||
CONFIG_KEXEC_SIG=y
|
CONFIG_KEXEC_SIG=y
|
||||||
|
@ -51,14 +50,11 @@ CONFIG_CHSC_SCH=y
|
||||||
CONFIG_VFIO_CCW=m
|
CONFIG_VFIO_CCW=m
|
||||||
CONFIG_VFIO_AP=m
|
CONFIG_VFIO_AP=m
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
CONFIG_HIBERNATION=y
|
|
||||||
CONFIG_PM_DEBUG=y
|
|
||||||
CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
|
CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
|
||||||
CONFIG_CMM=m
|
CONFIG_CMM=m
|
||||||
CONFIG_APPLDATA_BASE=y
|
CONFIG_APPLDATA_BASE=y
|
||||||
CONFIG_KVM=m
|
CONFIG_KVM=m
|
||||||
CONFIG_VHOST_NET=m
|
CONFIG_S390_UNWIND_SELFTEST=m
|
||||||
CONFIG_VHOST_VSOCK=m
|
|
||||||
CONFIG_OPROFILE=m
|
CONFIG_OPROFILE=m
|
||||||
CONFIG_KPROBES=y
|
CONFIG_KPROBES=y
|
||||||
CONFIG_JUMP_LABEL=y
|
CONFIG_JUMP_LABEL=y
|
||||||
|
@ -74,6 +70,8 @@ CONFIG_BLK_DEV_THROTTLING=y
|
||||||
CONFIG_BLK_WBT=y
|
CONFIG_BLK_WBT=y
|
||||||
CONFIG_BLK_CGROUP_IOLATENCY=y
|
CONFIG_BLK_CGROUP_IOLATENCY=y
|
||||||
CONFIG_BLK_CGROUP_IOCOST=y
|
CONFIG_BLK_CGROUP_IOCOST=y
|
||||||
|
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||||
|
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_IBM_PARTITION=y
|
CONFIG_IBM_PARTITION=y
|
||||||
CONFIG_BSD_DISKLABEL=y
|
CONFIG_BSD_DISKLABEL=y
|
||||||
|
@ -91,7 +89,6 @@ CONFIG_CLEANCACHE=y
|
||||||
CONFIG_FRONTSWAP=y
|
CONFIG_FRONTSWAP=y
|
||||||
CONFIG_MEM_SOFT_DIRTY=y
|
CONFIG_MEM_SOFT_DIRTY=y
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZBUD=m
|
|
||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||||
|
@ -125,6 +122,7 @@ CONFIG_SYN_COOKIES=y
|
||||||
CONFIG_NET_IPVTI=m
|
CONFIG_NET_IPVTI=m
|
||||||
CONFIG_INET_AH=m
|
CONFIG_INET_AH=m
|
||||||
CONFIG_INET_ESP=m
|
CONFIG_INET_ESP=m
|
||||||
|
CONFIG_INET_ESPINTCP=y
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_DIAG=m
|
CONFIG_INET_DIAG=m
|
||||||
CONFIG_INET_UDP_DIAG=m
|
CONFIG_INET_UDP_DIAG=m
|
||||||
|
@ -139,6 +137,7 @@ CONFIG_TCP_CONG_ILLINOIS=m
|
||||||
CONFIG_IPV6_ROUTER_PREF=y
|
CONFIG_IPV6_ROUTER_PREF=y
|
||||||
CONFIG_INET6_AH=m
|
CONFIG_INET6_AH=m
|
||||||
CONFIG_INET6_ESP=m
|
CONFIG_INET6_ESP=m
|
||||||
|
CONFIG_INET6_ESPINTCP=y
|
||||||
CONFIG_INET6_IPCOMP=m
|
CONFIG_INET6_IPCOMP=m
|
||||||
CONFIG_IPV6_MIP6=m
|
CONFIG_IPV6_MIP6=m
|
||||||
CONFIG_IPV6_VTI=m
|
CONFIG_IPV6_VTI=m
|
||||||
|
@ -146,7 +145,10 @@ CONFIG_IPV6_SIT=m
|
||||||
CONFIG_IPV6_GRE=m
|
CONFIG_IPV6_GRE=m
|
||||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||||
CONFIG_IPV6_SUBTREES=y
|
CONFIG_IPV6_SUBTREES=y
|
||||||
|
CONFIG_IPV6_RPL_LWTUNNEL=y
|
||||||
|
CONFIG_MPTCP=y
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
|
CONFIG_BRIDGE_NETFILTER=m
|
||||||
CONFIG_NF_CONNTRACK=m
|
CONFIG_NF_CONNTRACK=m
|
||||||
CONFIG_NF_CONNTRACK_SECMARK=y
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
|
@ -311,6 +313,7 @@ CONFIG_L2TP_V3=y
|
||||||
CONFIG_L2TP_IP=m
|
CONFIG_L2TP_IP=m
|
||||||
CONFIG_L2TP_ETH=m
|
CONFIG_L2TP_ETH=m
|
||||||
CONFIG_BRIDGE=m
|
CONFIG_BRIDGE=m
|
||||||
|
CONFIG_BRIDGE_MRP=y
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
CONFIG_VLAN_8021Q_GVRP=y
|
CONFIG_VLAN_8021Q_GVRP=y
|
||||||
CONFIG_NET_SCHED=y
|
CONFIG_NET_SCHED=y
|
||||||
|
@ -335,6 +338,7 @@ CONFIG_NET_SCH_CODEL=m
|
||||||
CONFIG_NET_SCH_FQ_CODEL=m
|
CONFIG_NET_SCH_FQ_CODEL=m
|
||||||
CONFIG_NET_SCH_INGRESS=m
|
CONFIG_NET_SCH_INGRESS=m
|
||||||
CONFIG_NET_SCH_PLUG=m
|
CONFIG_NET_SCH_PLUG=m
|
||||||
|
CONFIG_NET_SCH_ETS=m
|
||||||
CONFIG_NET_CLS_BASIC=m
|
CONFIG_NET_CLS_BASIC=m
|
||||||
CONFIG_NET_CLS_TCINDEX=m
|
CONFIG_NET_CLS_TCINDEX=m
|
||||||
CONFIG_NET_CLS_ROUTE4=m
|
CONFIG_NET_CLS_ROUTE4=m
|
||||||
|
@ -358,6 +362,7 @@ CONFIG_NET_ACT_PEDIT=m
|
||||||
CONFIG_NET_ACT_SIMP=m
|
CONFIG_NET_ACT_SIMP=m
|
||||||
CONFIG_NET_ACT_SKBEDIT=m
|
CONFIG_NET_ACT_SKBEDIT=m
|
||||||
CONFIG_NET_ACT_CSUM=m
|
CONFIG_NET_ACT_CSUM=m
|
||||||
|
CONFIG_NET_ACT_GATE=m
|
||||||
CONFIG_DNS_RESOLVER=y
|
CONFIG_DNS_RESOLVER=y
|
||||||
CONFIG_OPENVSWITCH=m
|
CONFIG_OPENVSWITCH=m
|
||||||
CONFIG_VSOCKETS=m
|
CONFIG_VSOCKETS=m
|
||||||
|
@ -368,6 +373,7 @@ CONFIG_BPF_JIT=y
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
# CONFIG_NET_DROP_MONITOR is not set
|
# CONFIG_NET_DROP_MONITOR is not set
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
|
# CONFIG_PCIEASPM is not set
|
||||||
CONFIG_HOTPLUG_PCI=y
|
CONFIG_HOTPLUG_PCI=y
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
CONFIG_UEVENT_HELPER=y
|
CONFIG_UEVENT_HELPER=y
|
||||||
|
@ -430,6 +436,7 @@ CONFIG_DM_ZERO=m
|
||||||
CONFIG_DM_MULTIPATH=m
|
CONFIG_DM_MULTIPATH=m
|
||||||
CONFIG_DM_MULTIPATH_QL=m
|
CONFIG_DM_MULTIPATH_QL=m
|
||||||
CONFIG_DM_MULTIPATH_ST=m
|
CONFIG_DM_MULTIPATH_ST=m
|
||||||
|
CONFIG_DM_MULTIPATH_HST=m
|
||||||
CONFIG_DM_DELAY=m
|
CONFIG_DM_DELAY=m
|
||||||
CONFIG_DM_UEVENT=y
|
CONFIG_DM_UEVENT=y
|
||||||
CONFIG_DM_FLAKEY=m
|
CONFIG_DM_FLAKEY=m
|
||||||
|
@ -444,6 +451,8 @@ CONFIG_EQUALIZER=m
|
||||||
CONFIG_IFB=m
|
CONFIG_IFB=m
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
|
CONFIG_VXLAN=m
|
||||||
|
CONFIG_BAREUDP=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
CONFIG_VIRTIO_NET=m
|
CONFIG_VIRTIO_NET=m
|
||||||
|
@ -477,7 +486,6 @@ CONFIG_NLMON=m
|
||||||
CONFIG_MLX4_EN=m
|
CONFIG_MLX4_EN=m
|
||||||
CONFIG_MLX5_CORE=m
|
CONFIG_MLX5_CORE=m
|
||||||
CONFIG_MLX5_CORE_EN=y
|
CONFIG_MLX5_CORE_EN=y
|
||||||
# CONFIG_MLXFW is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICREL is not set
|
# CONFIG_NET_VENDOR_MICREL is not set
|
||||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||||
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
||||||
|
@ -510,6 +518,7 @@ CONFIG_MLX5_CORE_EN=y
|
||||||
# CONFIG_NET_VENDOR_TI is not set
|
# CONFIG_NET_VENDOR_TI is not set
|
||||||
# CONFIG_NET_VENDOR_VIA is not set
|
# CONFIG_NET_VENDOR_VIA is not set
|
||||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||||
|
# CONFIG_NET_VENDOR_XILINX is not set
|
||||||
CONFIG_PPP=m
|
CONFIG_PPP=m
|
||||||
CONFIG_PPP_BSDCOMP=m
|
CONFIG_PPP_BSDCOMP=m
|
||||||
CONFIG_PPP_DEFLATE=m
|
CONFIG_PPP_DEFLATE=m
|
||||||
|
@ -557,6 +566,8 @@ CONFIG_VFIO_MDEV_DEVICE=m
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VIRTIO_INPUT=y
|
CONFIG_VIRTIO_INPUT=y
|
||||||
|
CONFIG_VHOST_NET=m
|
||||||
|
CONFIG_VHOST_VSOCK=m
|
||||||
CONFIG_S390_CCW_IOMMU=y
|
CONFIG_S390_CCW_IOMMU=y
|
||||||
CONFIG_S390_AP_IOMMU=y
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
|
@ -600,6 +611,7 @@ CONFIG_ZISOFS=y
|
||||||
CONFIG_UDF_FS=m
|
CONFIG_UDF_FS=m
|
||||||
CONFIG_MSDOS_FS=m
|
CONFIG_MSDOS_FS=m
|
||||||
CONFIG_VFAT_FS=m
|
CONFIG_VFAT_FS=m
|
||||||
|
CONFIG_EXFAT_FS=m
|
||||||
CONFIG_NTFS_FS=m
|
CONFIG_NTFS_FS=m
|
||||||
CONFIG_NTFS_RW=y
|
CONFIG_NTFS_RW=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
|
@ -642,8 +654,8 @@ CONFIG_NLS_UTF8=m
|
||||||
CONFIG_DLM=m
|
CONFIG_DLM=m
|
||||||
CONFIG_UNICODE=y
|
CONFIG_UNICODE=y
|
||||||
CONFIG_PERSISTENT_KEYRINGS=y
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
CONFIG_BIG_KEYS=y
|
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
|
CONFIG_KEY_NOTIFICATIONS=y
|
||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
CONFIG_SECURITY_NETWORK=y
|
CONFIG_SECURITY_NETWORK=y
|
||||||
CONFIG_SECURITY_SELINUX=y
|
CONFIG_SECURITY_SELINUX=y
|
||||||
|
@ -667,8 +679,11 @@ CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_DH=m
|
CONFIG_CRYPTO_DH=m
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_ECRDSA=m
|
CONFIG_CRYPTO_ECRDSA=m
|
||||||
|
CONFIG_CRYPTO_CURVE25519=m
|
||||||
|
CONFIG_CRYPTO_GCM=y
|
||||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
CONFIG_CRYPTO_AEGIS128=m
|
CONFIG_CRYPTO_AEGIS128=m
|
||||||
|
CONFIG_CRYPTO_SEQIV=y
|
||||||
CONFIG_CRYPTO_CFB=m
|
CONFIG_CRYPTO_CFB=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_OFB=m
|
CONFIG_CRYPTO_OFB=m
|
||||||
|
@ -678,6 +693,7 @@ CONFIG_CRYPTO_ADIANTUM=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
CONFIG_CRYPTO_VMAC=m
|
||||||
CONFIG_CRYPTO_CRC32=m
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
CONFIG_CRYPTO_BLAKE2S=m
|
||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||||
CONFIG_CRYPTO_RMD128=m
|
CONFIG_CRYPTO_RMD128=m
|
||||||
CONFIG_CRYPTO_RMD160=m
|
CONFIG_CRYPTO_RMD160=m
|
||||||
|
@ -694,6 +710,7 @@ CONFIG_CRYPTO_BLOWFISH=m
|
||||||
CONFIG_CRYPTO_CAMELLIA=m
|
CONFIG_CRYPTO_CAMELLIA=m
|
||||||
CONFIG_CRYPTO_CAST5=m
|
CONFIG_CRYPTO_CAST5=m
|
||||||
CONFIG_CRYPTO_CAST6=m
|
CONFIG_CRYPTO_CAST6=m
|
||||||
|
CONFIG_CRYPTO_DES=m
|
||||||
CONFIG_CRYPTO_FCRYPT=m
|
CONFIG_CRYPTO_FCRYPT=m
|
||||||
CONFIG_CRYPTO_KHAZAD=m
|
CONFIG_CRYPTO_KHAZAD=m
|
||||||
CONFIG_CRYPTO_SALSA20=m
|
CONFIG_CRYPTO_SALSA20=m
|
||||||
|
@ -712,6 +729,9 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
CONFIG_CRYPTO_USER_API_AEAD=m
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
CONFIG_CRYPTO_STATS=y
|
CONFIG_CRYPTO_STATS=y
|
||||||
|
CONFIG_CRYPTO_LIB_BLAKE2S=m
|
||||||
|
CONFIG_CRYPTO_LIB_CURVE25519=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_PKEY=m
|
CONFIG_PKEY=m
|
||||||
CONFIG_CRYPTO_PAES_S390=m
|
CONFIG_CRYPTO_PAES_S390=m
|
||||||
|
@ -725,6 +745,7 @@ CONFIG_CRYPTO_AES_S390=m
|
||||||
CONFIG_CRYPTO_GHASH_S390=m
|
CONFIG_CRYPTO_GHASH_S390=m
|
||||||
CONFIG_CRYPTO_CRC32_S390=y
|
CONFIG_CRYPTO_CRC32_S390=y
|
||||||
CONFIG_CORDIC=m
|
CONFIG_CORDIC=m
|
||||||
|
CONFIG_PRIME_NUMBERS=m
|
||||||
CONFIG_CRC4=m
|
CONFIG_CRC4=m
|
||||||
CONFIG_CRC7=m
|
CONFIG_CRC7=m
|
||||||
CONFIG_CRC8=m
|
CONFIG_CRC8=m
|
||||||
|
@ -739,10 +760,12 @@ CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
CONFIG_PANIC_ON_OOPS=y
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
|
CONFIG_TEST_LOCKUP=m
|
||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
CONFIG_STACK_TRACER=y
|
CONFIG_STACK_TRACER=y
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
|
|
|
@ -30,6 +30,7 @@ CONFIG_IBM_PARTITION=y
|
||||||
# CONFIG_BOUNCE is not set
|
# CONFIG_BOUNCE is not set
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
# CONFIG_IUCV is not set
|
# CONFIG_IUCV is not set
|
||||||
|
# CONFIG_ETHTOOL_NETLINK is not set
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
# CONFIG_BLK_DEV_XPRAM is not set
|
# CONFIG_BLK_DEV_XPRAM is not set
|
||||||
|
@ -55,6 +56,8 @@ CONFIG_RAW_DRIVER=y
|
||||||
# CONFIG_MONWRITER is not set
|
# CONFIG_MONWRITER is not set
|
||||||
# CONFIG_S390_VMUR is not set
|
# CONFIG_S390_VMUR is not set
|
||||||
# CONFIG_HID is not set
|
# CONFIG_HID is not set
|
||||||
|
# CONFIG_VIRTIO_MENU is not set
|
||||||
|
# CONFIG_VHOST_MENU is not set
|
||||||
# CONFIG_IOMMU_SUPPORT is not set
|
# CONFIG_IOMMU_SUPPORT is not set
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
# CONFIG_INOTIFY_USER is not set
|
# CONFIG_INOTIFY_USER is not set
|
||||||
|
@ -62,7 +65,9 @@ CONFIG_CONFIGFS_FS=y
|
||||||
# CONFIG_MISC_FILESYSTEMS is not set
|
# CONFIG_MISC_FILESYSTEMS is not set
|
||||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||||
CONFIG_LSM="yama,loadpin,safesetid,integrity"
|
CONFIG_LSM="yama,loadpin,safesetid,integrity"
|
||||||
|
# CONFIG_ZLIB_DFLTCC is not set
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
|
# CONFIG_SYMBOLIC_ERRNAME is not set
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
|
|
|
@ -31,12 +31,12 @@
|
||||||
#define KVM_USER_MEM_SLOTS 32
|
#define KVM_USER_MEM_SLOTS 32
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These seem to be used for allocating ->chip in the routing table,
|
* These seem to be used for allocating ->chip in the routing table, which we
|
||||||
* which we don't use. 4096 is an out-of-thin-air value. If we need
|
* don't use. 1 is as small as we can get to reduce the needed memory. If we
|
||||||
* to look at ->chip later on, we'll need to revisit this.
|
* need to look at ->chip later on, we'll need to revisit this.
|
||||||
*/
|
*/
|
||||||
#define KVM_NR_IRQCHIPS 1
|
#define KVM_NR_IRQCHIPS 1
|
||||||
#define KVM_IRQCHIP_NUM_PINS 4096
|
#define KVM_IRQCHIP_NUM_PINS 1
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 50000
|
#define KVM_HALT_POLL_NS_DEFAULT 50000
|
||||||
|
|
||||||
/* s390-specific vcpu->requests bit members */
|
/* s390-specific vcpu->requests bit members */
|
||||||
|
|
|
@ -881,12 +881,21 @@ static int __hw_perf_event_init(struct perf_event *event)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_callchain_event(struct perf_event *event)
|
||||||
|
{
|
||||||
|
u64 sample_type = event->attr.sample_type;
|
||||||
|
|
||||||
|
return sample_type & (PERF_SAMPLE_CALLCHAIN | PERF_SAMPLE_REGS_USER |
|
||||||
|
PERF_SAMPLE_STACK_USER);
|
||||||
|
}
|
||||||
|
|
||||||
static int cpumsf_pmu_event_init(struct perf_event *event)
|
static int cpumsf_pmu_event_init(struct perf_event *event)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* No support for taken branch sampling */
|
/* No support for taken branch sampling */
|
||||||
if (has_branch_stack(event))
|
/* No support for callchain, stacks and registers */
|
||||||
|
if (has_branch_stack(event) || is_callchain_event(event))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
switch (event->attr.type) {
|
switch (event->attr.type) {
|
||||||
|
|
|
@ -1100,6 +1100,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
if (IS_ENABLED(CONFIG_EXPOLINE_AUTO))
|
if (IS_ENABLED(CONFIG_EXPOLINE_AUTO))
|
||||||
nospec_auto_detect();
|
nospec_auto_detect();
|
||||||
|
|
||||||
|
jump_label_init();
|
||||||
parse_early_param();
|
parse_early_param();
|
||||||
#ifdef CONFIG_CRASH_DUMP
|
#ifdef CONFIG_CRASH_DUMP
|
||||||
/* Deactivate elfcorehdr= kernel parameter */
|
/* Deactivate elfcorehdr= kernel parameter */
|
||||||
|
|
|
@ -117,7 +117,7 @@ static inline pte_t __rste_to_pte(unsigned long rste)
|
||||||
_PAGE_YOUNG);
|
_PAGE_YOUNG);
|
||||||
#ifdef CONFIG_MEM_SOFT_DIRTY
|
#ifdef CONFIG_MEM_SOFT_DIRTY
|
||||||
pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_SOFT_DIRTY,
|
pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_SOFT_DIRTY,
|
||||||
_PAGE_DIRTY);
|
_PAGE_SOFT_DIRTY);
|
||||||
#endif
|
#endif
|
||||||
pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_NOEXEC,
|
pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_NOEXEC,
|
||||||
_PAGE_NOEXEC);
|
_PAGE_NOEXEC);
|
||||||
|
|
|
@ -62,11 +62,15 @@ notrace void *s390_kernel_write(void *dst, const void *src, size_t size)
|
||||||
long copied;
|
long copied;
|
||||||
|
|
||||||
spin_lock_irqsave(&s390_kernel_write_lock, flags);
|
spin_lock_irqsave(&s390_kernel_write_lock, flags);
|
||||||
while (size) {
|
if (!(flags & PSW_MASK_DAT)) {
|
||||||
copied = s390_kernel_write_odd(tmp, src, size);
|
memcpy(dst, src, size);
|
||||||
tmp += copied;
|
} else {
|
||||||
src += copied;
|
while (size) {
|
||||||
size -= copied;
|
copied = s390_kernel_write_odd(tmp, src, size);
|
||||||
|
tmp += copied;
|
||||||
|
src += copied;
|
||||||
|
size -= copied;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
|
spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,18 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
|
||||||
}
|
}
|
||||||
zdev->fh = ccdf->fh;
|
zdev->fh = ccdf->fh;
|
||||||
zdev->state = ZPCI_FN_STATE_CONFIGURED;
|
zdev->state = ZPCI_FN_STATE_CONFIGURED;
|
||||||
zpci_create_device(zdev);
|
ret = zpci_enable_device(zdev);
|
||||||
|
if (ret)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pdev = pci_scan_single_device(zdev->zbus->bus, zdev->devfn);
|
||||||
|
if (!pdev)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pci_bus_add_device(pdev);
|
||||||
|
pci_lock_rescan_remove();
|
||||||
|
pci_bus_add_devices(zdev->zbus->bus);
|
||||||
|
pci_unlock_rescan_remove();
|
||||||
break;
|
break;
|
||||||
case 0x0302: /* Reserved -> Standby */
|
case 0x0302: /* Reserved -> Standby */
|
||||||
if (!zdev) {
|
if (!zdev) {
|
||||||
|
|
|
@ -90,8 +90,8 @@ endif
|
||||||
|
|
||||||
vmlinux-objs-$(CONFIG_ACPI) += $(obj)/acpi.o
|
vmlinux-objs-$(CONFIG_ACPI) += $(obj)/acpi.o
|
||||||
|
|
||||||
vmlinux-objs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
|
|
||||||
vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o
|
vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o
|
||||||
|
efi-obj-$(CONFIG_EFI_STUB) = $(objtree)/drivers/firmware/efi/libstub/lib.a
|
||||||
|
|
||||||
# The compressed kernel is built with -fPIC/-fPIE so that a boot loader
|
# The compressed kernel is built with -fPIC/-fPIE so that a boot loader
|
||||||
# can place it anywhere in memory and it will still run. However, since
|
# can place it anywhere in memory and it will still run. However, since
|
||||||
|
@ -115,7 +115,7 @@ endef
|
||||||
quiet_cmd_check-and-link-vmlinux = LD $@
|
quiet_cmd_check-and-link-vmlinux = LD $@
|
||||||
cmd_check-and-link-vmlinux = $(cmd_check_data_rel); $(cmd_ld)
|
cmd_check-and-link-vmlinux = $(cmd_check_data_rel); $(cmd_ld)
|
||||||
|
|
||||||
$(obj)/vmlinux: $(vmlinux-objs-y) FORCE
|
$(obj)/vmlinux: $(vmlinux-objs-y) $(efi-obj-y) FORCE
|
||||||
$(call if_changed,check-and-link-vmlinux)
|
$(call if_changed,check-and-link-vmlinux)
|
||||||
|
|
||||||
OBJCOPYFLAGS_vmlinux.bin := -R .comment -S
|
OBJCOPYFLAGS_vmlinux.bin := -R .comment -S
|
||||||
|
|
|
@ -7,12 +7,20 @@ KASAN_SANITIZE := n
|
||||||
UBSAN_SANITIZE := n
|
UBSAN_SANITIZE := n
|
||||||
KCOV_INSTRUMENT := n
|
KCOV_INSTRUMENT := n
|
||||||
|
|
||||||
CFLAGS_REMOVE_common.o = $(CC_FLAGS_FTRACE) -fstack-protector -fstack-protector-strong
|
CFLAGS_REMOVE_common.o = $(CC_FLAGS_FTRACE)
|
||||||
CFLAGS_REMOVE_syscall_32.o = $(CC_FLAGS_FTRACE) -fstack-protector -fstack-protector-strong
|
CFLAGS_REMOVE_syscall_64.o = $(CC_FLAGS_FTRACE)
|
||||||
CFLAGS_REMOVE_syscall_64.o = $(CC_FLAGS_FTRACE) -fstack-protector -fstack-protector-strong
|
CFLAGS_REMOVE_syscall_32.o = $(CC_FLAGS_FTRACE)
|
||||||
|
CFLAGS_REMOVE_syscall_x32.o = $(CC_FLAGS_FTRACE)
|
||||||
|
|
||||||
|
CFLAGS_common.o += -fno-stack-protector
|
||||||
|
CFLAGS_syscall_64.o += -fno-stack-protector
|
||||||
|
CFLAGS_syscall_32.o += -fno-stack-protector
|
||||||
|
CFLAGS_syscall_x32.o += -fno-stack-protector
|
||||||
|
|
||||||
CFLAGS_syscall_64.o += $(call cc-option,-Wno-override-init,)
|
CFLAGS_syscall_64.o += $(call cc-option,-Wno-override-init,)
|
||||||
CFLAGS_syscall_32.o += $(call cc-option,-Wno-override-init,)
|
CFLAGS_syscall_32.o += $(call cc-option,-Wno-override-init,)
|
||||||
|
CFLAGS_syscall_x32.o += $(call cc-option,-Wno-override-init,)
|
||||||
|
|
||||||
obj-y := entry_$(BITS).o thunk_$(BITS).o syscall_$(BITS).o
|
obj-y := entry_$(BITS).o thunk_$(BITS).o syscall_$(BITS).o
|
||||||
obj-y += common.o
|
obj-y += common.o
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include <trace/events/syscalls.h>
|
#include <trace/events/syscalls.h>
|
||||||
|
|
||||||
/* Check that the stack and regs on entry from user mode are sane. */
|
/* Check that the stack and regs on entry from user mode are sane. */
|
||||||
static void check_user_regs(struct pt_regs *regs)
|
static noinstr void check_user_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) {
|
if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) {
|
||||||
/*
|
/*
|
||||||
|
@ -294,7 +294,7 @@ static void __prepare_exit_to_usermode(struct pt_regs *regs)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__visible noinstr void prepare_exit_to_usermode(struct pt_regs *regs)
|
static noinstr void prepare_exit_to_usermode(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
instrumentation_begin();
|
instrumentation_begin();
|
||||||
__prepare_exit_to_usermode(regs);
|
__prepare_exit_to_usermode(regs);
|
||||||
|
|
|
@ -469,16 +469,15 @@ __visible noinstr void func(struct pt_regs *regs, \
|
||||||
.align 8
|
.align 8
|
||||||
SYM_CODE_START(irq_entries_start)
|
SYM_CODE_START(irq_entries_start)
|
||||||
vector=FIRST_EXTERNAL_VECTOR
|
vector=FIRST_EXTERNAL_VECTOR
|
||||||
pos = .
|
|
||||||
.rept (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
|
.rept (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
|
||||||
UNWIND_HINT_IRET_REGS
|
UNWIND_HINT_IRET_REGS
|
||||||
|
0 :
|
||||||
.byte 0x6a, vector
|
.byte 0x6a, vector
|
||||||
jmp asm_common_interrupt
|
jmp asm_common_interrupt
|
||||||
nop
|
nop
|
||||||
/* Ensure that the above is 8 bytes max */
|
/* Ensure that the above is 8 bytes max */
|
||||||
. = pos + 8
|
. = 0b + 8
|
||||||
pos=pos+8
|
vector = vector+1
|
||||||
vector=vector+1
|
|
||||||
.endr
|
.endr
|
||||||
SYM_CODE_END(irq_entries_start)
|
SYM_CODE_END(irq_entries_start)
|
||||||
|
|
||||||
|
@ -486,16 +485,15 @@ SYM_CODE_END(irq_entries_start)
|
||||||
.align 8
|
.align 8
|
||||||
SYM_CODE_START(spurious_entries_start)
|
SYM_CODE_START(spurious_entries_start)
|
||||||
vector=FIRST_SYSTEM_VECTOR
|
vector=FIRST_SYSTEM_VECTOR
|
||||||
pos = .
|
|
||||||
.rept (NR_VECTORS - FIRST_SYSTEM_VECTOR)
|
.rept (NR_VECTORS - FIRST_SYSTEM_VECTOR)
|
||||||
UNWIND_HINT_IRET_REGS
|
UNWIND_HINT_IRET_REGS
|
||||||
|
0 :
|
||||||
.byte 0x6a, vector
|
.byte 0x6a, vector
|
||||||
jmp asm_spurious_interrupt
|
jmp asm_spurious_interrupt
|
||||||
nop
|
nop
|
||||||
/* Ensure that the above is 8 bytes max */
|
/* Ensure that the above is 8 bytes max */
|
||||||
. = pos + 8
|
. = 0b + 8
|
||||||
pos=pos+8
|
vector = vector+1
|
||||||
vector=vector+1
|
|
||||||
.endr
|
.endr
|
||||||
SYM_CODE_END(spurious_entries_start)
|
SYM_CODE_END(spurious_entries_start)
|
||||||
#endif
|
#endif
|
||||||
|
@ -553,7 +551,7 @@ DECLARE_IDTENTRY_RAW(X86_TRAP_MC, exc_machine_check);
|
||||||
|
|
||||||
/* NMI */
|
/* NMI */
|
||||||
DECLARE_IDTENTRY_NMI(X86_TRAP_NMI, exc_nmi);
|
DECLARE_IDTENTRY_NMI(X86_TRAP_NMI, exc_nmi);
|
||||||
#ifdef CONFIG_XEN_PV
|
#if defined(CONFIG_XEN_PV) && defined(CONFIG_X86_64)
|
||||||
DECLARE_IDTENTRY_RAW(X86_TRAP_NMI, xenpv_exc_nmi);
|
DECLARE_IDTENTRY_RAW(X86_TRAP_NMI, xenpv_exc_nmi);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -563,7 +561,7 @@ DECLARE_IDTENTRY_DEBUG(X86_TRAP_DB, exc_debug);
|
||||||
#else
|
#else
|
||||||
DECLARE_IDTENTRY_RAW(X86_TRAP_DB, exc_debug);
|
DECLARE_IDTENTRY_RAW(X86_TRAP_DB, exc_debug);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_XEN_PV
|
#if defined(CONFIG_XEN_PV) && defined(CONFIG_X86_64)
|
||||||
DECLARE_IDTENTRY_RAW(X86_TRAP_DB, xenpv_exc_debug);
|
DECLARE_IDTENTRY_RAW(X86_TRAP_DB, xenpv_exc_debug);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -626,8 +624,8 @@ DECLARE_IDTENTRY_SYSVEC(POSTED_INTR_NESTED_VECTOR, sysvec_kvm_posted_intr_nested
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_HYPERV)
|
#if IS_ENABLED(CONFIG_HYPERV)
|
||||||
DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_hyperv_callback);
|
DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_hyperv_callback);
|
||||||
DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_REENLIGHTENMENT_VECTOR, sysvec_hyperv_reenlightenment);
|
DECLARE_IDTENTRY_SYSVEC(HYPERV_REENLIGHTENMENT_VECTOR, sysvec_hyperv_reenlightenment);
|
||||||
DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_STIMER0_VECTOR, sysvec_hyperv_stimer0);
|
DECLARE_IDTENTRY_SYSVEC(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_ACRN_GUEST)
|
#if IS_ENABLED(CONFIG_ACRN_GUEST)
|
||||||
|
|
|
@ -19,12 +19,28 @@ struct task_struct;
|
||||||
void io_bitmap_share(struct task_struct *tsk);
|
void io_bitmap_share(struct task_struct *tsk);
|
||||||
void io_bitmap_exit(struct task_struct *tsk);
|
void io_bitmap_exit(struct task_struct *tsk);
|
||||||
|
|
||||||
|
static inline void native_tss_invalidate_io_bitmap(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Invalidate the I/O bitmap by moving io_bitmap_base outside the
|
||||||
|
* TSS limit so any subsequent I/O access from user space will
|
||||||
|
* trigger a #GP.
|
||||||
|
*
|
||||||
|
* This is correct even when VMEXIT rewrites the TSS limit
|
||||||
|
* to 0x67 as the only requirement is that the base points
|
||||||
|
* outside the limit.
|
||||||
|
*/
|
||||||
|
this_cpu_write(cpu_tss_rw.x86_tss.io_bitmap_base,
|
||||||
|
IO_BITMAP_OFFSET_INVALID);
|
||||||
|
}
|
||||||
|
|
||||||
void native_tss_update_io_bitmap(void);
|
void native_tss_update_io_bitmap(void);
|
||||||
|
|
||||||
#ifdef CONFIG_PARAVIRT_XXL
|
#ifdef CONFIG_PARAVIRT_XXL
|
||||||
#include <asm/paravirt.h>
|
#include <asm/paravirt.h>
|
||||||
#else
|
#else
|
||||||
#define tss_update_io_bitmap native_tss_update_io_bitmap
|
#define tss_update_io_bitmap native_tss_update_io_bitmap
|
||||||
|
#define tss_invalidate_io_bitmap native_tss_invalidate_io_bitmap
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -302,6 +302,11 @@ static inline void write_idt_entry(gate_desc *dt, int entry, const gate_desc *g)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_IOPL_IOPERM
|
#ifdef CONFIG_X86_IOPL_IOPERM
|
||||||
|
static inline void tss_invalidate_io_bitmap(void)
|
||||||
|
{
|
||||||
|
PVOP_VCALL0(cpu.invalidate_io_bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void tss_update_io_bitmap(void)
|
static inline void tss_update_io_bitmap(void)
|
||||||
{
|
{
|
||||||
PVOP_VCALL0(cpu.update_io_bitmap);
|
PVOP_VCALL0(cpu.update_io_bitmap);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue