Merge remote-tracking branch 'torvalds/master' into perf/core

Minor conflict in tools/perf/arch/arm/util/auxtrace.c as one fix there
was cherry-picked for the last perf/urgent pull req to Linus, so was
already there.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2020-08-03 09:37:31 -03:00
commit b1aa3db2c1
1009 changed files with 9623 additions and 6488 deletions

View File

@ -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>
@ -193,6 +198,9 @@ Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com>
Mayuresh Janorkar <mayur@ti.com> Mayuresh Janorkar <mayur@ti.com>
Michael Buesch <m@bues.ch> Michael Buesch <m@bues.ch>
Michel Dänzer <michel@tungstengraphics.com> Michel Dänzer <michel@tungstengraphics.com>
Mike Rapoport <rppt@kernel.org> <mike@compulab.co.il>
Mike Rapoport <rppt@kernel.org> <mike.rapoport@gmail.com>
Mike Rapoport <rppt@kernel.org> <rppt@linux.ibm.com>
Miodrag Dinic <miodrag.dinic@mips.com> <miodrag.dinic@imgtec.com> Miodrag Dinic <miodrag.dinic@mips.com> <miodrag.dinic@imgtec.com>
Miquel Raynal <miquel.raynal@bootlin.com> <miquel.raynal@free-electrons.com> Miquel Raynal <miquel.raynal@bootlin.com> <miquel.raynal@free-electrons.com>
Mitesh shah <mshah@teja.com> Mitesh shah <mshah@teja.com>

View File

@ -16,7 +16,16 @@ Description: Allow the root user to disable/enable in runtime the clock
gating mechanism in Gaudi. Due to how Gaudi is built, the gating mechanism in Gaudi. Due to how Gaudi is built, the
clock gating needs to be disabled in order to access the clock gating needs to be disabled in order to access the
registers of the TPC and MME engines. This is sometimes needed registers of the TPC and MME engines. This is sometimes needed
during debug by the user and hence the user needs this option during debug by the user and hence the user needs this option.
The user can supply a bitmask value, each bit represents
a different engine to disable/enable its clock gating feature.
The bitmask is composed of 20 bits:
0 - 7 : DMA channels
8 - 11 : MME engines
12 - 19 : TPC engines
The bit's location of a specific engine can be determined
using (1 << GAUDI_ENGINE_ID_*). GAUDI_ENGINE_ID_* values
are defined in uapi habanalabs.h file in enum gaudi_engine_id
What: /sys/kernel/debug/habanalabs/hl<n>/command_buffers What: /sys/kernel/debug/habanalabs/hl<n>/command_buffers
Date: Jan 2019 Date: Jan 2019

View File

@ -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.

View File

@ -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 |
+------------------------------+---------+---------+ +------------------------------+---------+---------+

View File

@ -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.

View File

@ -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

View File

@ -47,6 +47,9 @@ properties:
$ref: /schemas/types.yaml#/definitions/phandle-array $ref: /schemas/types.yaml#/definitions/phandle-array
description: Phandle to the device SRAM description: Phandle to the device SRAM
iommus:
maxItems: 1
memory-region: memory-region:
description: description:
CMA pool to use for buffers allocation instead of the default CMA pool to use for buffers allocation instead of the default

View File

@ -378,6 +378,8 @@ examples:
- | - |
sound { sound {
compatible = "simple-audio-card"; compatible = "simple-audio-card";
#address-cells = <1>;
#size-cells = <0>;
simple-audio-card,name = "rsnd-ak4643"; simple-audio-card,name = "rsnd-ak4643";
simple-audio-card,format = "left_j"; simple-audio-card,format = "left_j";
@ -391,10 +393,12 @@ examples:
"ak4642 Playback", "DAI1 Playback"; "ak4642 Playback", "DAI1 Playback";
dpcmcpu: simple-audio-card,cpu@0 { dpcmcpu: simple-audio-card,cpu@0 {
reg = <0>;
sound-dai = <&rcar_sound 0>; sound-dai = <&rcar_sound 0>;
}; };
simple-audio-card,cpu@1 { simple-audio-card,cpu@1 {
reg = <1>;
sound-dai = <&rcar_sound 1>; sound-dai = <&rcar_sound 1>;
}; };
@ -418,6 +422,8 @@ examples:
- | - |
sound { sound {
compatible = "simple-audio-card"; compatible = "simple-audio-card";
#address-cells = <1>;
#size-cells = <0>;
simple-audio-card,routing = simple-audio-card,routing =
"pcm3168a Playback", "DAI1 Playback", "pcm3168a Playback", "DAI1 Playback",
@ -426,6 +432,7 @@ examples:
"pcm3168a Playback", "DAI4 Playback"; "pcm3168a Playback", "DAI4 Playback";
simple-audio-card,dai-link@0 { simple-audio-card,dai-link@0 {
reg = <0>;
format = "left_j"; format = "left_j";
bitclock-master = <&sndcpu0>; bitclock-master = <&sndcpu0>;
frame-master = <&sndcpu0>; frame-master = <&sndcpu0>;
@ -439,22 +446,23 @@ examples:
}; };
simple-audio-card,dai-link@1 { simple-audio-card,dai-link@1 {
reg = <1>;
format = "i2s"; format = "i2s";
bitclock-master = <&sndcpu1>; bitclock-master = <&sndcpu1>;
frame-master = <&sndcpu1>; frame-master = <&sndcpu1>;
convert-channels = <8>; /* TDM Split */ convert-channels = <8>; /* TDM Split */
sndcpu1: cpu@0 { sndcpu1: cpu0 {
sound-dai = <&rcar_sound 1>; sound-dai = <&rcar_sound 1>;
}; };
cpu@1 { cpu1 {
sound-dai = <&rcar_sound 2>; sound-dai = <&rcar_sound 2>;
}; };
cpu@2 { cpu2 {
sound-dai = <&rcar_sound 3>; sound-dai = <&rcar_sound 3>;
}; };
cpu@3 { cpu3 {
sound-dai = <&rcar_sound 4>; sound-dai = <&rcar_sound 4>;
}; };
codec { codec {
@ -466,6 +474,7 @@ examples:
}; };
simple-audio-card,dai-link@2 { simple-audio-card,dai-link@2 {
reg = <2>;
format = "i2s"; format = "i2s";
bitclock-master = <&sndcpu2>; bitclock-master = <&sndcpu2>;
frame-master = <&sndcpu2>; frame-master = <&sndcpu2>;

View File

@ -23,6 +23,7 @@ PTP hardware clock infrastructure for Linux
+ Ancillary clock features + Ancillary clock features
- Time stamp external events - Time stamp external events
- Period output signals configurable from user space - Period output signals configurable from user space
- Low Pass Filter (LPF) access from user space
- Synchronization of the Linux system time via the PPS subsystem - Synchronization of the Linux system time via the PPS subsystem
PTP hardware clock kernel API PTP hardware clock kernel API
@ -94,3 +95,14 @@ Supported hardware
- Auxiliary Slave/Master Mode Snapshot (optional interrupt) - Auxiliary Slave/Master Mode Snapshot (optional interrupt)
- Target Time (optional interrupt) - Target Time (optional interrupt)
* Renesas (IDT) ClockMatrix™
- Up to 4 independent PHC channels
- Integrated low pass filter (LPF), access via .adjPhase (compliant to ITU-T G.8273.2)
- Programmable output periodic signals
- Programmable inputs can time stamp external triggers
- Driver and/or hardware configuration through firmware (idtcm.bin)
- LPF settings (bandwidth, phase limiting, automatic holdover, physical layer assist (per ITU-T G.8273.2))
- Programmable output PTP clocks, any frequency up to 1GHz (to other PHY/MAC time stampers, refclk to ASSPs/SoCs/FPGAs)
- Lock to GNSS input, automatic switching between GNSS and user-space PHC control (optional)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -8,9 +8,8 @@ There are various L3 encapsulation standards using UDP being discussed to
leverage the UDP based load balancing capability of different networks. leverage the UDP based load balancing capability of different networks.
MPLSoUDP (__ https://tools.ietf.org/html/rfc7510) is one among them. MPLSoUDP (__ https://tools.ietf.org/html/rfc7510) is one among them.
The Bareudp tunnel module provides a generic L3 encapsulation tunnelling The Bareudp tunnel module provides a generic L3 encapsulation support for
support for tunnelling different L3 protocols like MPLS, IP, NSH etc. inside tunnelling different L3 protocols like MPLS, IP, NSH etc. inside a UDP tunnel.
a UDP tunnel.
Special Handling Special Handling
---------------- ----------------
@ -26,7 +25,7 @@ Usage
1) Device creation & deletion 1) Device creation & deletion
a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype 0x8847. a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc
This creates a bareudp tunnel device which tunnels L3 traffic with ethertype This creates a bareudp tunnel device which tunnels L3 traffic with ethertype
0x8847 (MPLS traffic). The destination port of the UDP header will be set to 0x8847 (MPLS traffic). The destination port of the UDP header will be set to
@ -34,14 +33,21 @@ Usage
b) ip link delete bareudp0 b) ip link delete bareudp0
2) Device creation with multiple proto mode enabled 2) Device creation with multiproto mode enabled
There are two ways to create a bareudp device for MPLS & IP with multiproto mode The multiproto mode allows bareudp tunnels to handle several protocols of the
enabled. same family. It is currently only available for IP and MPLS. This mode has to
be enabled explicitly with the "multiproto" flag.
a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype 0x8847 multiproto a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto
b) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls For an IPv4 tunnel the multiproto mode allows the tunnel to also handle
IPv6.
b) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto
For MPLS, the multiproto mode allows the tunnel to handle both unicast
and multicast MPLS packets.
3) Device Usage 3) Device Usage

View File

@ -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

View File

@ -486,6 +486,10 @@ narrow. The description of these groups must be added to the following table:
- Contains packet traps for packets that should be locally delivered after - Contains packet traps for packets that should be locally delivered after
routing, but do not match more specific packet traps (e.g., routing, but do not match more specific packet traps (e.g.,
``ipv4_bgp``) ``ipv4_bgp``)
* - ``external_delivery``
- Contains packet traps for packets that should be routed through an
external interface (e.g., management interface) that does not belong to
the same device (e.g., switch ASIC) as the ingress interface
* - ``ipv6`` * - ``ipv6``
- Contains packet traps for various IPv6 control packets (e.g., Router - Contains packet traps for various IPv6 control packets (e.g., Router
Advertisements) Advertisements)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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
----------- -----------

View File

@ -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 {

View File

@ -782,7 +782,7 @@ F: include/dt-bindings/reset/altr,rst-mgr-a10sr.h
F: include/linux/mfd/altera-a10sr.h F: include/linux/mfd/altera-a10sr.h
ALTERA TRIPLE SPEED ETHERNET DRIVER ALTERA TRIPLE SPEED ETHERNET DRIVER
M: Thor Thayer <thor.thayer@linux.intel.com> M: Joyce Ooi <joyce.ooi@intel.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Maintained S: Maintained
F: drivers/net/ethernet/altera/ F: drivers/net/ethernet/altera/
@ -1425,7 +1425,7 @@ F: arch/arm*/include/asm/perf_event.h
F: arch/arm*/kernel/hw_breakpoint.c F: arch/arm*/kernel/hw_breakpoint.c
F: arch/arm*/kernel/perf_* F: arch/arm*/kernel/perf_*
F: arch/arm/oprofile/common.c F: arch/arm/oprofile/common.c
F: drivers/perf/* F: drivers/perf/
F: include/linux/perf/arm_pmu.h F: include/linux/perf/arm_pmu.h
ARM PORT ARM PORT
@ -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/
@ -6956,6 +6956,7 @@ M: Timur Tabi <timur@kernel.org>
M: Nicolin Chen <nicoleotsuka@gmail.com> M: Nicolin Chen <nicoleotsuka@gmail.com>
M: Xiubo Li <Xiubo.Lee@gmail.com> M: Xiubo Li <Xiubo.Lee@gmail.com>
R: Fabio Estevam <festevam@gmail.com> R: Fabio Estevam <festevam@gmail.com>
R: Shengjiu Wang <shengjiu.wang@gmail.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
L: linuxppc-dev@lists.ozlabs.org L: linuxppc-dev@lists.ozlabs.org
S: Maintained S: Maintained
@ -9305,6 +9306,17 @@ F: Documentation/kbuild/kconfig*
F: scripts/Kconfig.include F: scripts/Kconfig.include
F: scripts/kconfig/ F: scripts/kconfig/
KCOV
R: Dmitry Vyukov <dvyukov@google.com>
R: Andrey Konovalov <andreyknvl@google.com>
L: kasan-dev@googlegroups.com
S: Maintained
F: Documentation/dev-tools/kcov.rst
F: include/linux/kcov.h
F: include/uapi/linux/kcov.h
F: kernel/kcov.c
F: scripts/Makefile.kcov
KCSAN KCSAN
M: Marco Elver <elver@google.com> M: Marco Elver <elver@google.com>
R: Dmitry Vyukov <dvyukov@google.com> R: Dmitry Vyukov <dvyukov@google.com>
@ -11240,7 +11252,7 @@ S: Maintained
F: drivers/crypto/atmel-ecc.* F: drivers/crypto/atmel-ecc.*
MICROCHIP I2C DRIVER MICROCHIP I2C DRIVER
M: Ludovic Desroches <ludovic.desroches@microchip.com> M: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
L: linux-i2c@vger.kernel.org L: linux-i2c@vger.kernel.org
S: Supported S: Supported
F: drivers/i2c/busses/i2c-at91-*.c F: drivers/i2c/busses/i2c-at91-*.c
@ -11333,17 +11345,17 @@ F: drivers/iio/adc/at91-sama5d2_adc.c
F: include/dt-bindings/iio/adc/at91-sama5d2_adc.h F: include/dt-bindings/iio/adc/at91-sama5d2_adc.h
MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER
M: Nicolas Ferre <nicolas.ferre@microchip.com> M: Claudiu Beznea <claudiu.beznea@microchip.com>
S: Supported S: Supported
F: drivers/power/reset/at91-sama5d2_shdwc.c F: drivers/power/reset/at91-sama5d2_shdwc.c
MICROCHIP SPI DRIVER MICROCHIP SPI DRIVER
M: Nicolas Ferre <nicolas.ferre@microchip.com> M: Tudor Ambarus <tudor.ambarus@microchip.com>
S: Supported S: Supported
F: drivers/spi/spi-atmel.* F: drivers/spi/spi-atmel.*
MICROCHIP SSC DRIVER MICROCHIP SSC DRIVER
M: Nicolas Ferre <nicolas.ferre@microchip.com> M: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Supported S: Supported
F: drivers/misc/atmel-ssc.c F: drivers/misc/atmel-ssc.c
@ -14176,7 +14188,8 @@ F: Documentation/devicetree/bindings/net/qcom,ethqos.txt
F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
QUALCOMM GENERIC INTERFACE I2C DRIVER QUALCOMM GENERIC INTERFACE I2C DRIVER
M: Alok Chauhan <alokc@codeaurora.org> M: Akash Asthana <akashast@codeaurora.org>
M: Mukesh Savaliya <msavaliy@codeaurora.org>
L: linux-i2c@vger.kernel.org L: linux-i2c@vger.kernel.org
L: linux-arm-msm@vger.kernel.org L: linux-arm-msm@vger.kernel.org
S: Supported S: Supported
@ -14831,7 +14844,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 +14875,8 @@ 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: Matthew Rosato <mjrosato@linux.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 +14904,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 +17527,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 +18486,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*

View File

@ -2,7 +2,7 @@
VERSION = 5 VERSION = 5
PATCHLEVEL = 8 PATCHLEVEL = 8
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc4 EXTRAVERSION =
NAME = Kleptomaniac Octopus NAME = Kleptomaniac Octopus
# *DOCUMENTATION* # *DOCUMENTATION*
@ -567,7 +567,7 @@ ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
ifneq ($(CROSS_COMPILE),) ifneq ($(CROSS_COMPILE),)
CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit)) GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
endif endif
ifneq ($(GCC_TOOLCHAIN),) ifneq ($(GCC_TOOLCHAIN),)
@ -1754,7 +1754,7 @@ PHONY += descend $(build-dirs)
descend: $(build-dirs) descend: $(build-dirs)
$(build-dirs): prepare $(build-dirs): prepare
$(Q)$(MAKE) $(build)=$@ \ $(Q)$(MAKE) $(build)=$@ \
single-build=$(if $(filter-out $@/, $(filter $@/%, $(single-no-ko))),1) \ single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
need-builtin=1 need-modorder=1 need-builtin=1 need-modorder=1
clean-dirs := $(addprefix _clean_, $(clean-dirs)) clean-dirs := $(addprefix _clean_, $(clean-dirs))

View File

@ -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";

View File

@ -342,7 +342,8 @@ gateclk: clock-gating-control@18220 {
comphy: phy@18300 { comphy: phy@18300 {
compatible = "marvell,armada-380-comphy"; compatible = "marvell,armada-380-comphy";
reg = <0x18300 0x100>; reg-names = "comphy", "conf";
reg = <0x18300 0x100>, <0x18460 4>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;

View File

@ -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 {

View File

@ -397,7 +397,7 @@ MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
pinctrl_usbotg: usbotggrp { pinctrl_usbotg: usbotggrp {
fsl,pins = < fsl,pins = <
MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059 MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
>; >;
}; };
@ -409,6 +409,7 @@ MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17070
MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17070 MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17070
MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17070 MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17070
MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17070 MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17070
MX6QDL_PAD_GPIO_1__GPIO1_IO01 0x1b0b0
>; >;
}; };

View File

@ -99,7 +99,7 @@ ethphy1: ethernet-phy@1 {
&fec2 { &fec2 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet2>; pinctrl-0 = <&pinctrl_enet2>;
phy-mode = "rgmii"; phy-mode = "rgmii-id";
phy-handle = <&ethphy0>; phy-handle = <&ethphy0>;
fsl,magic-packet; fsl,magic-packet;
status = "okay"; status = "okay";

View File

@ -213,7 +213,7 @@ ethphy2: ethernet-phy@2 {
&fec2 { &fec2 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet2>; pinctrl-0 = <&pinctrl_enet2>;
phy-mode = "rgmii"; phy-mode = "rgmii-id";
phy-handle = <&ethphy2>; phy-handle = <&ethphy2>;
status = "okay"; status = "okay";
}; };

View File

@ -402,7 +402,7 @@ ethphy0: ethernet-phy@0 {
&gbe0 { &gbe0 {
phy-handle = <&ethphy0>; phy-handle = <&ethphy0>;
phy-mode = "rgmii-id"; phy-mode = "rgmii-rxid";
status = "okay"; status = "okay";
}; };

View File

@ -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;

View File

@ -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 */

View File

@ -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>;

View File

@ -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>;

View File

@ -198,7 +198,7 @@ reserved-memory {
default-pool { default-pool {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
size = <0x6000000>; size = <0x6000000>;
alloc-ranges = <0x4a000000 0x6000000>; alloc-ranges = <0x40000000 0x10000000>;
reusable; reusable;
linux,cma-default; linux,cma-default;
}; };

View File

@ -117,7 +117,7 @@ reserved-memory {
default-pool { default-pool {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
size = <0x6000000>; size = <0x6000000>;
alloc-ranges = <0x4a000000 0x6000000>; alloc-ranges = <0x40000000 0x10000000>;
reusable; reusable;
linux,cma-default; linux,cma-default;
}; };

View File

@ -181,7 +181,7 @@ reserved-memory {
default-pool { default-pool {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
size = <0x6000000>; size = <0x6000000>;
alloc-ranges = <0x4a000000 0x6000000>; alloc-ranges = <0x40000000 0x10000000>;
reusable; reusable;
linux,cma-default; linux,cma-default;
}; };

View File

@ -5,6 +5,8 @@
#ifndef _ASM_ARM_PERCPU_H_ #ifndef _ASM_ARM_PERCPU_H_
#define _ASM_ARM_PERCPU_H_ #define _ASM_ARM_PERCPU_H_
#include <asm/thread_info.h>
/* /*
* Same as asm-generic/percpu.h, except that we store the per cpu offset * Same as asm-generic/percpu.h, except that we store the per cpu offset
* in the TPIDRPRW. TPIDRPRW only exists on V6K and V7 * in the TPIDRPRW. TPIDRPRW only exists on V6K and V7

View File

@ -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)
{ {

View File

@ -683,6 +683,12 @@ static void disable_single_step(struct perf_event *bp)
arch_install_hw_breakpoint(bp); arch_install_hw_breakpoint(bp);
} }
static int watchpoint_fault_on_uaccess(struct pt_regs *regs,
struct arch_hw_breakpoint *info)
{
return !user_mode(regs) && info->ctrl.privilege == ARM_BREAKPOINT_USER;
}
static void watchpoint_handler(unsigned long addr, unsigned int fsr, static void watchpoint_handler(unsigned long addr, unsigned int fsr,
struct pt_regs *regs) struct pt_regs *regs)
{ {
@ -742,16 +748,27 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,
} }
pr_debug("watchpoint fired: address = 0x%x\n", info->trigger); pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
/*
* If we triggered a user watchpoint from a uaccess routine,
* then handle the stepping ourselves since userspace really
* can't help us with this.
*/
if (watchpoint_fault_on_uaccess(regs, info))
goto step;
perf_bp_event(wp, regs); perf_bp_event(wp, regs);
/* /*
* If no overflow handler is present, insert a temporary * Defer stepping to the overflow handler if one is installed.
* mismatch breakpoint so we can single-step over the * Otherwise, insert a temporary mismatch breakpoint so that
* watchpoint trigger. * we can single-step over the watchpoint trigger.
*/ */
if (is_default_overflow_handler(wp)) if (!is_default_overflow_handler(wp))
enable_single_step(wp, instruction_pointer(regs)); goto unlock;
step:
enable_single_step(wp, instruction_pointer(regs));
unlock: unlock:
rcu_read_unlock(); rcu_read_unlock();
} }

View File

@ -184,6 +184,7 @@ static void __init patch_vdso(void *ehdr)
if (!cntvct_ok) { if (!cntvct_ok) {
vdso_nullpatch_one(&einfo, "__vdso_gettimeofday"); vdso_nullpatch_one(&einfo, "__vdso_gettimeofday");
vdso_nullpatch_one(&einfo, "__vdso_clock_gettime"); vdso_nullpatch_one(&einfo, "__vdso_clock_gettime");
vdso_nullpatch_one(&einfo, "__vdso_clock_gettime64");
} }
} }

View File

@ -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);

View File

@ -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);
} }

View File

@ -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,
}, },
}; };

View File

@ -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));
} }

View File

@ -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));

View File

@ -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[] = {

View File

@ -966,7 +966,7 @@ void __init create_mapping_late(struct mm_struct *mm, struct map_desc *md,
pud_t *pud; pud_t *pud;
p4d = p4d_alloc(mm, pgd_offset(mm, md->virtual), md->virtual); p4d = p4d_alloc(mm, pgd_offset(mm, md->virtual), md->virtual);
if (!WARN_ON(!p4d)) if (WARN_ON(!p4d))
return; return;
pud = pud_alloc(mm, p4d, md->virtual); pud = pud_alloc(mm, p4d, md->virtual);
if (WARN_ON(!pud)) if (WARN_ON(!pud))

View File

@ -137,7 +137,7 @@ export TEXT_OFFSET
core-y += arch/arm64/ core-y += arch/arm64/
libs-y := arch/arm64/lib/ $(libs-y) libs-y := arch/arm64/lib/ $(libs-y)
core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
# Default target when executing plain make # Default target when executing plain make
boot := arch/arm64/boot boot := arch/arm64/boot

View File

@ -161,6 +161,7 @@ video-codec@1c0e000 {
resets = <&ccu RST_BUS_VE>; resets = <&ccu RST_BUS_VE>;
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
allwinner,sram = <&ve_sram 1>; allwinner,sram = <&ve_sram 1>;
iommus = <&iommu 3>;
}; };
gpu: gpu@1800000 { gpu: gpu@1800000 {

View File

@ -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>;

View File

@ -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>;

View File

@ -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>;
}; };
}; };
}; };

View File

@ -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",

View File

@ -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";

View File

@ -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 */
};

View File

@ -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>;
}; };

View File

@ -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>;

View File

@ -454,10 +454,7 @@ &cp1_eth2 {
status = "okay"; status = "okay";
phy-mode = "2500base-x"; phy-mode = "2500base-x";
phys = <&cp1_comphy5 2>; phys = <&cp1_comphy5 2>;
fixed-link { managed = "in-band-status";
speed = <2500>;
full-duplex;
};
}; };
&cp1_spi1 { &cp1_spi1 {

View File

@ -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

View File

@ -77,9 +77,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
"663:\n\t" \ "663:\n\t" \
newinstr "\n" \ newinstr "\n" \
"664:\n\t" \ "664:\n\t" \
".previous\n\t" \
".org . - (664b-663b) + (662b-661b)\n\t" \ ".org . - (664b-663b) + (662b-661b)\n\t" \
".org . - (662b-661b) + (664b-663b)\n" \ ".org . - (662b-661b) + (664b-663b)\n\t" \
".previous\n" \
".endif\n" ".endif\n"
#define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb) \ #define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb) \

View File

@ -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 *,

View File

@ -24,16 +24,17 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
{ {
__uint128_t tmp; __uint128_t tmp;
u64 sum; u64 sum;
int n = ihl; /* we want it signed */
tmp = *(const __uint128_t *)iph; tmp = *(const __uint128_t *)iph;
iph += 16; iph += 16;
ihl -= 4; n -= 4;
tmp += ((tmp >> 64) | (tmp << 64)); tmp += ((tmp >> 64) | (tmp << 64));
sum = tmp >> 64; sum = tmp >> 64;
do { do {
sum += *(const u32 *)iph; sum += *(const u32 *)iph;
iph += 4; iph += 4;
} while (--ihl); } while (--n > 0);
sum += ((sum >> 32) | (sum << 32)); sum += ((sum >> 32) | (sum << 32));
return csum_fold((__force u32)(sum >> 32)); return csum_fold((__force u32)(sum >> 32));

View File

@ -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);

View File

@ -380,9 +380,14 @@ struct kvm_vcpu_arch {
#define vcpu_has_sve(vcpu) (system_supports_sve() && \ #define vcpu_has_sve(vcpu) (system_supports_sve() && \
((vcpu)->arch.flags & KVM_ARM64_GUEST_HAS_SVE)) ((vcpu)->arch.flags & KVM_ARM64_GUEST_HAS_SVE))
#define vcpu_has_ptrauth(vcpu) ((system_supports_address_auth() || \ #ifdef CONFIG_ARM64_PTR_AUTH
system_supports_generic_auth()) && \ #define vcpu_has_ptrauth(vcpu) \
((vcpu)->arch.flags & KVM_ARM64_GUEST_HAS_PTRAUTH)) ((cpus_have_final_cap(ARM64_HAS_ADDRESS_AUTH) || \
cpus_have_final_cap(ARM64_HAS_GENERIC_AUTH)) && \
(vcpu)->arch.flags & KVM_ARM64_GUEST_HAS_PTRAUTH)
#else
#define vcpu_has_ptrauth(vcpu) false
#endif
#define vcpu_gp_regs(v) (&(v)->arch.ctxt.gp_regs) #define vcpu_gp_regs(v) (&(v)->arch.ctxt.gp_regs)

View File

@ -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) \
({ \ ({ \

View File

@ -30,7 +30,6 @@
#include <linux/threads.h> #include <linux/threads.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/thread_info.h> #include <linux/thread_info.h>
#include <asm/pointer_auth.h>
DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number); DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number);

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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 */

View File

@ -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))

View File

@ -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

View File

@ -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)
{ {

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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(&regs->user_regs, current); ret |= !valid_user_regs(&regs->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);
} }
/* /*

View File

@ -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

View File

@ -14,7 +14,7 @@ COMPAT_GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE_COMPAT)elfedit))
COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..) COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..)
CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%)) CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR) CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE_COMPAT))
CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments
ifneq ($(COMPAT_GCC_TOOLCHAIN),) ifneq ($(COMPAT_GCC_TOOLCHAIN),)
CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN) CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN)

View File

@ -1326,7 +1326,7 @@ static bool stage2_get_leaf_entry(struct kvm *kvm, phys_addr_t addr,
return true; return true;
} }
static bool stage2_is_exec(struct kvm *kvm, phys_addr_t addr) static bool stage2_is_exec(struct kvm *kvm, phys_addr_t addr, unsigned long sz)
{ {
pud_t *pudp; pud_t *pudp;
pmd_t *pmdp; pmd_t *pmdp;
@ -1338,11 +1338,11 @@ static bool stage2_is_exec(struct kvm *kvm, phys_addr_t addr)
return false; return false;
if (pudp) if (pudp)
return kvm_s2pud_exec(pudp); return sz <= PUD_SIZE && kvm_s2pud_exec(pudp);
else if (pmdp) else if (pmdp)
return kvm_s2pmd_exec(pmdp); return sz <= PMD_SIZE && kvm_s2pmd_exec(pmdp);
else else
return kvm_s2pte_exec(ptep); return sz == PAGE_SIZE && kvm_s2pte_exec(ptep);
} }
static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache,
@ -1958,7 +1958,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
* execute permissions, and we preserve whatever we have. * execute permissions, and we preserve whatever we have.
*/ */
needs_exec = exec_fault || needs_exec = exec_fault ||
(fault_status == FSC_PERM && stage2_is_exec(kvm, fault_ipa)); (fault_status == FSC_PERM &&
stage2_is_exec(kvm, fault_ipa, vma_pagesize));
if (vma_pagesize == PUD_SIZE) { if (vma_pagesize == PUD_SIZE) {
pud_t new_pud = kvm_pfn_pud(pfn, mem_type); pud_t new_pud = kvm_pfn_pud(pfn, mem_type);

View File

@ -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 */ \

View File

@ -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:

View File

@ -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);

View File

@ -212,6 +212,8 @@ atomic64_set(atomic64_t *v, s64 i)
_atomic_spin_unlock_irqrestore(v, flags); _atomic_spin_unlock_irqrestore(v, flags);
} }
#define atomic64_set_release(v, i) atomic64_set((v), (i))
static __inline__ s64 static __inline__ s64
atomic64_read(const atomic64_t *v) atomic64_read(const atomic64_t *v)
{ {

View File

@ -60,6 +60,7 @@ extern void __cmpxchg_called_with_bad_pointer(void);
extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old, extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old,
unsigned int new_); unsigned int new_);
extern u64 __cmpxchg_u64(volatile u64 *ptr, u64 old, u64 new_); extern u64 __cmpxchg_u64(volatile u64 *ptr, u64 old, u64 new_);
extern u8 __cmpxchg_u8(volatile u8 *ptr, u8 old, u8 new_);
/* don't worry...optimizer will get rid of most of this */ /* don't worry...optimizer will get rid of most of this */
static inline unsigned long static inline unsigned long
@ -71,6 +72,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
#endif #endif
case 4: return __cmpxchg_u32((unsigned int *)ptr, case 4: return __cmpxchg_u32((unsigned int *)ptr,
(unsigned int)old, (unsigned int)new_); (unsigned int)old, (unsigned int)new_);
case 1: return __cmpxchg_u8((u8 *)ptr, (u8)old, (u8)new_);
} }
__cmpxchg_called_with_bad_pointer(); __cmpxchg_called_with_bad_pointer();
return old; return old;

View File

@ -79,3 +79,15 @@ unsigned long __cmpxchg_u32(volatile unsigned int *ptr, unsigned int old, unsign
_atomic_spin_unlock_irqrestore(ptr, flags); _atomic_spin_unlock_irqrestore(ptr, flags);
return (unsigned long)prev; return (unsigned long)prev;
} }
u8 __cmpxchg_u8(volatile u8 *ptr, u8 old, u8 new)
{
unsigned long flags;
u8 prev;
_atomic_spin_lock_irqsave(ptr, flags);
if ((prev = *ptr) == old)
*ptr = new;
_atomic_spin_unlock_irqrestore(ptr, flags);
return prev;
}

View File

@ -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

View File

@ -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)
@ -3072,10 +3072,18 @@ do_hash_page:
ori r0,r0,DSISR_BAD_FAULT_64S@l ori r0,r0,DSISR_BAD_FAULT_64S@l
and. r0,r5,r0 /* weird error? */ and. r0,r5,r0 /* weird error? */
bne- handle_page_fault /* if not, try to insert a HPTE */ bne- handle_page_fault /* if not, try to insert a HPTE */
/*
* If we are in an "NMI" (e.g., an interrupt when soft-disabled), then
* don't call hash_page, just fail the fault. This is required to
* prevent re-entrancy problems in the hash code, namely perf
* interrupts hitting while something holds H_PAGE_BUSY, and taking a
* hash fault. See the comment in hash_preload().
*/
ld r11, PACA_THREAD_INFO(r13) ld r11, PACA_THREAD_INFO(r13)
lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */ lwz r0,TI_PREEMPT(r11)
andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */ andis. r0,r0,NMI_MASK@h
bne 77f /* then don't call hash_page now */ bne 77f
/* /*
* r3 contains the trap number * r3 contains the trap number

View File

@ -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;
} }

View File

@ -1559,6 +1559,7 @@ static void hash_preload(struct mm_struct *mm, pte_t *ptep, unsigned long ea,
pgd_t *pgdir; pgd_t *pgdir;
int rc, ssize, update_flags = 0; int rc, ssize, update_flags = 0;
unsigned long access = _PAGE_PRESENT | _PAGE_READ | (is_exec ? _PAGE_EXEC : 0); unsigned long access = _PAGE_PRESENT | _PAGE_READ | (is_exec ? _PAGE_EXEC : 0);
unsigned long flags;
BUG_ON(get_region_id(ea) != USER_REGION_ID); BUG_ON(get_region_id(ea) != USER_REGION_ID);
@ -1592,6 +1593,28 @@ static void hash_preload(struct mm_struct *mm, pte_t *ptep, unsigned long ea,
return; return;
#endif /* CONFIG_PPC_64K_PAGES */ #endif /* CONFIG_PPC_64K_PAGES */
/*
* __hash_page_* must run with interrupts off, as it sets the
* H_PAGE_BUSY bit. It's possible for perf interrupts to hit at any
* time and may take a hash fault reading the user stack, see
* read_user_stack_slow() in the powerpc/perf code.
*
* If that takes a hash fault on the same page as we lock here, it
* will bail out when seeing H_PAGE_BUSY set, and retry the access
* leading to an infinite loop.
*
* Disabling interrupts here does not prevent perf interrupts, but it
* will prevent them taking hash faults (see the NMI test in
* do_hash_page), then read_user_stack's copy_from_user_nofault will
* fail and perf will fall back to read_user_stack_slow(), which
* walks the Linux page tables.
*
* Interrupts must also be off for the duration of the
* mm_is_thread_local test and update, to prevent preempt running the
* mm on another CPU (XXX: this may be racy vs kthread_use_mm).
*/
local_irq_save(flags);
/* Is that local to this CPU ? */ /* Is that local to this CPU ? */
if (mm_is_thread_local(mm)) if (mm_is_thread_local(mm))
update_flags |= HPTE_LOCAL_UPDATE; update_flags |= HPTE_LOCAL_UPDATE;
@ -1614,6 +1637,8 @@ static void hash_preload(struct mm_struct *mm, pte_t *ptep, unsigned long ea,
mm_ctx_user_psize(&mm->context), mm_ctx_user_psize(&mm->context),
mm_ctx_user_psize(&mm->context), mm_ctx_user_psize(&mm->context),
pte_val(*ptep)); pte_val(*ptep));
local_irq_restore(flags);
} }
/* /*

View File

@ -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)

View File

@ -2179,6 +2179,12 @@ static void __perf_event_interrupt(struct pt_regs *regs)
perf_read_regs(regs); perf_read_regs(regs);
/*
* If perf interrupts hit in a local_irq_disable (soft-masked) region,
* we consider them as NMIs. This is required to prevent hash faults on
* user addresses when reading callchains. See the NMI test in
* do_hash_page.
*/
nmi = perf_intr_is_nmi(regs); nmi = perf_intr_is_nmi(regs);
if (nmi) if (nmi)
nmi_enter(); nmi_enter();

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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:";

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