Merge 5.3-rc4 into char-misc-next
We need the char-misc fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
77e38c19f3
|
@ -41,10 +41,11 @@ Related CVEs
|
||||||
|
|
||||||
The following CVE entries describe Spectre variants:
|
The following CVE entries describe Spectre variants:
|
||||||
|
|
||||||
============= ======================= =================
|
============= ======================= ==========================
|
||||||
CVE-2017-5753 Bounds check bypass Spectre variant 1
|
CVE-2017-5753 Bounds check bypass Spectre variant 1
|
||||||
CVE-2017-5715 Branch target injection Spectre variant 2
|
CVE-2017-5715 Branch target injection Spectre variant 2
|
||||||
============= ======================= =================
|
CVE-2019-1125 Spectre v1 swapgs Spectre variant 1 (swapgs)
|
||||||
|
============= ======================= ==========================
|
||||||
|
|
||||||
Problem
|
Problem
|
||||||
-------
|
-------
|
||||||
|
@ -78,6 +79,13 @@ There are some extensions of Spectre variant 1 attacks for reading data
|
||||||
over the network, see :ref:`[12] <spec_ref12>`. However such attacks
|
over the network, see :ref:`[12] <spec_ref12>`. However such attacks
|
||||||
are difficult, low bandwidth, fragile, and are considered low risk.
|
are difficult, low bandwidth, fragile, and are considered low risk.
|
||||||
|
|
||||||
|
Note that, despite "Bounds Check Bypass" name, Spectre variant 1 is not
|
||||||
|
only about user-controlled array bounds checks. It can affect any
|
||||||
|
conditional checks. The kernel entry code interrupt, exception, and NMI
|
||||||
|
handlers all have conditional swapgs checks. Those may be problematic
|
||||||
|
in the context of Spectre v1, as kernel code can speculatively run with
|
||||||
|
a user GS.
|
||||||
|
|
||||||
Spectre variant 2 (Branch Target Injection)
|
Spectre variant 2 (Branch Target Injection)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
|
@ -132,6 +140,9 @@ not cover all possible attack vectors.
|
||||||
1. A user process attacking the kernel
|
1. A user process attacking the kernel
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Spectre variant 1
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The attacker passes a parameter to the kernel via a register or
|
The attacker passes a parameter to the kernel via a register or
|
||||||
via a known address in memory during a syscall. Such parameter may
|
via a known address in memory during a syscall. Such parameter may
|
||||||
be used later by the kernel as an index to an array or to derive
|
be used later by the kernel as an index to an array or to derive
|
||||||
|
@ -144,7 +155,40 @@ not cover all possible attack vectors.
|
||||||
potentially be influenced for Spectre attacks, new "nospec" accessor
|
potentially be influenced for Spectre attacks, new "nospec" accessor
|
||||||
macros are used to prevent speculative loading of data.
|
macros are used to prevent speculative loading of data.
|
||||||
|
|
||||||
Spectre variant 2 attacker can :ref:`poison <poison_btb>` the branch
|
Spectre variant 1 (swapgs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
An attacker can train the branch predictor to speculatively skip the
|
||||||
|
swapgs path for an interrupt or exception. If they initialize
|
||||||
|
the GS register to a user-space value, if the swapgs is speculatively
|
||||||
|
skipped, subsequent GS-related percpu accesses in the speculation
|
||||||
|
window will be done with the attacker-controlled GS value. This
|
||||||
|
could cause privileged memory to be accessed and leaked.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
if (coming from user space)
|
||||||
|
swapgs
|
||||||
|
mov %gs:<percpu_offset>, %reg
|
||||||
|
mov (%reg), %reg1
|
||||||
|
|
||||||
|
When coming from user space, the CPU can speculatively skip the
|
||||||
|
swapgs, and then do a speculative percpu load using the user GS
|
||||||
|
value. So the user can speculatively force a read of any kernel
|
||||||
|
value. If a gadget exists which uses the percpu value as an address
|
||||||
|
in another load/store, then the contents of the kernel value may
|
||||||
|
become visible via an L1 side channel attack.
|
||||||
|
|
||||||
|
A similar attack exists when coming from kernel space. The CPU can
|
||||||
|
speculatively do the swapgs, causing the user GS to get used for the
|
||||||
|
rest of the speculative window.
|
||||||
|
|
||||||
|
Spectre variant 2
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A spectre variant 2 attacker can :ref:`poison <poison_btb>` the branch
|
||||||
target buffer (BTB) before issuing syscall to launch an attack.
|
target buffer (BTB) before issuing syscall to launch an attack.
|
||||||
After entering the kernel, the kernel could use the poisoned branch
|
After entering the kernel, the kernel could use the poisoned branch
|
||||||
target buffer on indirect jump and jump to gadget code in speculative
|
target buffer on indirect jump and jump to gadget code in speculative
|
||||||
|
@ -280,11 +324,18 @@ The sysfs file showing Spectre variant 1 mitigation status is:
|
||||||
|
|
||||||
The possible values in this file are:
|
The possible values in this file are:
|
||||||
|
|
||||||
======================================= =================================
|
.. list-table::
|
||||||
'Mitigation: __user pointer sanitation' Protection in kernel on a case by
|
|
||||||
case base with explicit pointer
|
* - 'Not affected'
|
||||||
sanitation.
|
- The processor is not vulnerable.
|
||||||
======================================= =================================
|
* - 'Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers'
|
||||||
|
- The swapgs protections are disabled; otherwise it has
|
||||||
|
protection in the kernel on a case by case base with explicit
|
||||||
|
pointer sanitation and usercopy LFENCE barriers.
|
||||||
|
* - 'Mitigation: usercopy/swapgs barriers and __user pointer sanitization'
|
||||||
|
- Protection in the kernel on a case by case base with explicit
|
||||||
|
pointer sanitation, usercopy LFENCE barriers, and swapgs LFENCE
|
||||||
|
barriers.
|
||||||
|
|
||||||
However, the protections are put in place on a case by case basis,
|
However, the protections are put in place on a case by case basis,
|
||||||
and there is no guarantee that all possible attack vectors for Spectre
|
and there is no guarantee that all possible attack vectors for Spectre
|
||||||
|
@ -366,12 +417,27 @@ Turning on mitigation for Spectre variant 1 and Spectre variant 2
|
||||||
1. Kernel mitigation
|
1. Kernel mitigation
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Spectre variant 1
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
For the Spectre variant 1, vulnerable kernel code (as determined
|
For the Spectre variant 1, vulnerable kernel code (as determined
|
||||||
by code audit or scanning tools) is annotated on a case by case
|
by code audit or scanning tools) is annotated on a case by case
|
||||||
basis to use nospec accessor macros for bounds clipping :ref:`[2]
|
basis to use nospec accessor macros for bounds clipping :ref:`[2]
|
||||||
<spec_ref2>` to avoid any usable disclosure gadgets. However, it may
|
<spec_ref2>` to avoid any usable disclosure gadgets. However, it may
|
||||||
not cover all attack vectors for Spectre variant 1.
|
not cover all attack vectors for Spectre variant 1.
|
||||||
|
|
||||||
|
Copy-from-user code has an LFENCE barrier to prevent the access_ok()
|
||||||
|
check from being mis-speculated. The barrier is done by the
|
||||||
|
barrier_nospec() macro.
|
||||||
|
|
||||||
|
For the swapgs variant of Spectre variant 1, LFENCE barriers are
|
||||||
|
added to interrupt, exception and NMI entry where needed. These
|
||||||
|
barriers are done by the FENCE_SWAPGS_KERNEL_ENTRY and
|
||||||
|
FENCE_SWAPGS_USER_ENTRY macros.
|
||||||
|
|
||||||
|
Spectre variant 2
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
For Spectre variant 2 mitigation, the compiler turns indirect calls or
|
For Spectre variant 2 mitigation, the compiler turns indirect calls or
|
||||||
jumps in the kernel into equivalent return trampolines (retpolines)
|
jumps in the kernel into equivalent return trampolines (retpolines)
|
||||||
:ref:`[3] <spec_ref3>` :ref:`[9] <spec_ref9>` to go to the target
|
:ref:`[3] <spec_ref3>` :ref:`[9] <spec_ref9>` to go to the target
|
||||||
|
@ -473,6 +539,12 @@ Mitigation control on the kernel command line
|
||||||
Spectre variant 2 mitigation can be disabled or force enabled at the
|
Spectre variant 2 mitigation can be disabled or force enabled at the
|
||||||
kernel command line.
|
kernel command line.
|
||||||
|
|
||||||
|
nospectre_v1
|
||||||
|
|
||||||
|
[X86,PPC] Disable mitigations for Spectre Variant 1
|
||||||
|
(bounds check bypass). With this option data leaks are
|
||||||
|
possible in the system.
|
||||||
|
|
||||||
nospectre_v2
|
nospectre_v2
|
||||||
|
|
||||||
[X86] Disable all mitigations for the Spectre variant 2
|
[X86] Disable all mitigations for the Spectre variant 2
|
||||||
|
|
|
@ -2604,7 +2604,7 @@
|
||||||
expose users to several CPU vulnerabilities.
|
expose users to several CPU vulnerabilities.
|
||||||
Equivalent to: nopti [X86,PPC]
|
Equivalent to: nopti [X86,PPC]
|
||||||
kpti=0 [ARM64]
|
kpti=0 [ARM64]
|
||||||
nospectre_v1 [PPC]
|
nospectre_v1 [X86,PPC]
|
||||||
nobp=0 [S390]
|
nobp=0 [S390]
|
||||||
nospectre_v2 [X86,PPC,S390,ARM64]
|
nospectre_v2 [X86,PPC,S390,ARM64]
|
||||||
spectre_v2_user=off [X86]
|
spectre_v2_user=off [X86]
|
||||||
|
@ -2965,9 +2965,9 @@
|
||||||
nosmt=force: Force disable SMT, cannot be undone
|
nosmt=force: Force disable SMT, cannot be undone
|
||||||
via the sysfs control file.
|
via the sysfs control file.
|
||||||
|
|
||||||
nospectre_v1 [PPC] Disable mitigations for Spectre Variant 1 (bounds
|
nospectre_v1 [X86,PPC] Disable mitigations for Spectre Variant 1
|
||||||
check bypass). With this option data leaks are possible
|
(bounds check bypass). With this option data leaks are
|
||||||
in the system.
|
possible in the system.
|
||||||
|
|
||||||
nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64] Disable all mitigations for
|
nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64] Disable all mitigations for
|
||||||
the Spectre variant 2 (indirect branch prediction)
|
the Spectre variant 2 (indirect branch prediction)
|
||||||
|
|
|
@ -1,162 +0,0 @@
|
||||||
===================
|
|
||||||
RISC-V CPU Bindings
|
|
||||||
===================
|
|
||||||
|
|
||||||
The device tree allows to describe the layout of CPUs in a system through
|
|
||||||
the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
|
|
||||||
defining properties for every cpu.
|
|
||||||
|
|
||||||
Bindings for CPU nodes follow the Devicetree Specification, available from:
|
|
||||||
|
|
||||||
https://www.devicetree.org/specifications/
|
|
||||||
|
|
||||||
with updates for 32-bit and 64-bit RISC-V systems provided in this document.
|
|
||||||
|
|
||||||
===========
|
|
||||||
Terminology
|
|
||||||
===========
|
|
||||||
|
|
||||||
This document uses some terminology common to the RISC-V community that is not
|
|
||||||
widely used, the definitions of which are listed here:
|
|
||||||
|
|
||||||
* hart: A hardware execution context, which contains all the state mandated by
|
|
||||||
the RISC-V ISA: a PC and some registers. This terminology is designed to
|
|
||||||
disambiguate software's view of execution contexts from any particular
|
|
||||||
microarchitectural implementation strategy. For example, my Intel laptop is
|
|
||||||
described as having one socket with two cores, each of which has two hyper
|
|
||||||
threads. Therefore this system has four harts.
|
|
||||||
|
|
||||||
=====================================
|
|
||||||
cpus and cpu node bindings definition
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
The RISC-V architecture, in accordance with the Devicetree Specification,
|
|
||||||
requires the cpus and cpu nodes to be present and contain the properties
|
|
||||||
described below.
|
|
||||||
|
|
||||||
- cpus node
|
|
||||||
|
|
||||||
Description: Container of cpu nodes
|
|
||||||
|
|
||||||
The node name must be "cpus".
|
|
||||||
|
|
||||||
A cpus node must define the following properties:
|
|
||||||
|
|
||||||
- #address-cells
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: must be set to 1
|
|
||||||
- #size-cells
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: must be set to 0
|
|
||||||
|
|
||||||
- cpu node
|
|
||||||
|
|
||||||
Description: Describes a hart context
|
|
||||||
|
|
||||||
PROPERTIES
|
|
||||||
|
|
||||||
- device_type
|
|
||||||
Usage: required
|
|
||||||
Value type: <string>
|
|
||||||
Definition: must be "cpu"
|
|
||||||
- reg
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: The hart ID of this CPU node
|
|
||||||
- compatible:
|
|
||||||
Usage: required
|
|
||||||
Value type: <stringlist>
|
|
||||||
Definition: must contain "riscv", may contain one of
|
|
||||||
"sifive,rocket0"
|
|
||||||
- mmu-type:
|
|
||||||
Usage: optional
|
|
||||||
Value type: <string>
|
|
||||||
Definition: Specifies the CPU's MMU type. Possible values are
|
|
||||||
"riscv,sv32"
|
|
||||||
"riscv,sv39"
|
|
||||||
"riscv,sv48"
|
|
||||||
- riscv,isa:
|
|
||||||
Usage: required
|
|
||||||
Value type: <string>
|
|
||||||
Definition: Contains the RISC-V ISA string of this hart. These
|
|
||||||
ISA strings are defined by the RISC-V ISA manual.
|
|
||||||
|
|
||||||
Example: SiFive Freedom U540G Development Kit
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
This system contains two harts: a hart marked as disabled that's used for
|
|
||||||
low-level system tasks and should be ignored by Linux, and a second hart that
|
|
||||||
Linux is allowed to run on.
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
timebase-frequency = <1000000>;
|
|
||||||
cpu@0 {
|
|
||||||
clock-frequency = <1600000000>;
|
|
||||||
compatible = "sifive,rocket0", "riscv";
|
|
||||||
device_type = "cpu";
|
|
||||||
i-cache-block-size = <64>;
|
|
||||||
i-cache-sets = <128>;
|
|
||||||
i-cache-size = <16384>;
|
|
||||||
next-level-cache = <&L15 &L0>;
|
|
||||||
reg = <0>;
|
|
||||||
riscv,isa = "rv64imac";
|
|
||||||
status = "disabled";
|
|
||||||
L10: interrupt-controller {
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
interrupt-controller;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
cpu@1 {
|
|
||||||
clock-frequency = <1600000000>;
|
|
||||||
compatible = "sifive,rocket0", "riscv";
|
|
||||||
d-cache-block-size = <64>;
|
|
||||||
d-cache-sets = <64>;
|
|
||||||
d-cache-size = <32768>;
|
|
||||||
d-tlb-sets = <1>;
|
|
||||||
d-tlb-size = <32>;
|
|
||||||
device_type = "cpu";
|
|
||||||
i-cache-block-size = <64>;
|
|
||||||
i-cache-sets = <64>;
|
|
||||||
i-cache-size = <32768>;
|
|
||||||
i-tlb-sets = <1>;
|
|
||||||
i-tlb-size = <32>;
|
|
||||||
mmu-type = "riscv,sv39";
|
|
||||||
next-level-cache = <&L15 &L0>;
|
|
||||||
reg = <1>;
|
|
||||||
riscv,isa = "rv64imafdc";
|
|
||||||
status = "okay";
|
|
||||||
tlb-split;
|
|
||||||
L13: interrupt-controller {
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
interrupt-controller;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
Example: Spike ISA Simulator with 1 Hart
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
This device tree matches the Spike ISA golden model as run with `spike -p1`.
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
cpu@0 {
|
|
||||||
device_type = "cpu";
|
|
||||||
reg = <0x00000000>;
|
|
||||||
status = "okay";
|
|
||||||
compatible = "riscv";
|
|
||||||
riscv,isa = "rv64imafdc";
|
|
||||||
mmu-type = "riscv,sv48";
|
|
||||||
clock-frequency = <0x3b9aca00>;
|
|
||||||
interrupt-controller {
|
|
||||||
#interrupt-cells = <0x00000001>;
|
|
||||||
interrupt-controller;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -10,6 +10,18 @@ maintainers:
|
||||||
- Paul Walmsley <paul.walmsley@sifive.com>
|
- Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
- Palmer Dabbelt <palmer@sifive.com>
|
- Palmer Dabbelt <palmer@sifive.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
This document uses some terminology common to the RISC-V community
|
||||||
|
that is not widely used, the definitions of which are listed here:
|
||||||
|
|
||||||
|
hart: A hardware execution context, which contains all the state
|
||||||
|
mandated by the RISC-V ISA: a PC and some registers. This
|
||||||
|
terminology is designed to disambiguate software's view of execution
|
||||||
|
contexts from any particular microarchitectural implementation
|
||||||
|
strategy. For example, an Intel laptop containing one socket with
|
||||||
|
two cores, each of which has two hyperthreads, could be described as
|
||||||
|
having four harts.
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
items:
|
items:
|
||||||
|
@ -50,6 +62,10 @@ properties:
|
||||||
User-Level ISA document, available from
|
User-Level ISA document, available from
|
||||||
https://riscv.org/specifications/
|
https://riscv.org/specifications/
|
||||||
|
|
||||||
|
While the isa strings in ISA specification are case
|
||||||
|
insensitive, letters in the riscv,isa string must be all
|
||||||
|
lowercase to simplify parsing.
|
||||||
|
|
||||||
timebase-frequency:
|
timebase-frequency:
|
||||||
type: integer
|
type: integer
|
||||||
minimum: 1
|
minimum: 1
|
||||||
|
|
|
@ -19,7 +19,7 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
- sifive,freedom-unleashed-a00
|
- sifive,hifive-unleashed-a00
|
||||||
- const: sifive,fu540-c000
|
- const: sifive,fu540-c000
|
||||||
- const: sifive,fu540
|
- const: sifive,fu540
|
||||||
...
|
...
|
||||||
|
|
|
@ -73,7 +73,6 @@ patternProperties:
|
||||||
Compatible of the SPI device.
|
Compatible of the SPI device.
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 256
|
maximum: 256
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -13,7 +13,8 @@ a) SMB3 (and SMB3.1.1) missing optional features:
|
||||||
- T10 copy offload ie "ODX" (copy chunk, and "Duplicate Extents" ioctl
|
- T10 copy offload ie "ODX" (copy chunk, and "Duplicate Extents" ioctl
|
||||||
currently the only two server side copy mechanisms supported)
|
currently the only two server side copy mechanisms supported)
|
||||||
|
|
||||||
b) improved sparse file support
|
b) improved sparse file support (fiemap and SEEK_HOLE are implemented
|
||||||
|
but additional features would be supportable by the protocol).
|
||||||
|
|
||||||
c) Directory entry caching relies on a 1 second timer, rather than
|
c) Directory entry caching relies on a 1 second timer, rather than
|
||||||
using Directory Leases, currently only the root file handle is cached longer
|
using Directory Leases, currently only the root file handle is cached longer
|
||||||
|
@ -21,9 +22,13 @@ using Directory Leases, currently only the root file handle is cached longer
|
||||||
d) quota support (needs minor kernel change since quota calls
|
d) quota support (needs minor kernel change since quota calls
|
||||||
to make it to network filesystems or deviceless filesystems)
|
to make it to network filesystems or deviceless filesystems)
|
||||||
|
|
||||||
e) Additional use cases where we use "compoounding" (e.g. open/query/close
|
e) Additional use cases can be optimized to use "compounding"
|
||||||
and open/setinfo/close) to reduce the number of roundtrips, and also
|
(e.g. open/query/close and open/setinfo/close) to reduce the number
|
||||||
open to reduce redundant opens (using deferred close and reference counts more).
|
of roundtrips to the server and improve performance. Various cases
|
||||||
|
(stat, statfs, create, unlink, mkdir) already have been improved by
|
||||||
|
using compounding but more can be done. In addition we could significantly
|
||||||
|
reduce redundant opens by using deferred close (with handle caching leases)
|
||||||
|
and better using reference counters on file handles.
|
||||||
|
|
||||||
f) Finish inotify support so kde and gnome file list windows
|
f) Finish inotify support so kde and gnome file list windows
|
||||||
will autorefresh (partially complete by Asser). Needs minor kernel
|
will autorefresh (partially complete by Asser). Needs minor kernel
|
||||||
|
@ -43,18 +48,17 @@ mount or a per server basis to client UIDs or nobody if no mapping
|
||||||
exists. Also better integration with winbind for resolving SID owners
|
exists. Also better integration with winbind for resolving SID owners
|
||||||
|
|
||||||
k) Add tools to take advantage of more smb3 specific ioctls and features
|
k) Add tools to take advantage of more smb3 specific ioctls and features
|
||||||
(passthrough ioctl/fsctl for sending various SMB3 fsctls to the server
|
(passthrough ioctl/fsctl is now implemented in cifs.ko to allow sending
|
||||||
is in progress, and a passthrough query_info call is already implemented
|
various SMB3 fsctls and query info and set info calls directly from user space)
|
||||||
in cifs.ko to allow smb3 info levels queries to be sent from userspace)
|
Add tools to make setting various non-POSIX metadata attributes easier
|
||||||
|
from tools (e.g. extending what was done in smb-info tool).
|
||||||
|
|
||||||
l) encrypted file support
|
l) encrypted file support
|
||||||
|
|
||||||
m) improved stats gathering tools (perhaps integration with nfsometer?)
|
m) improved stats gathering tools (perhaps integration with nfsometer?)
|
||||||
to extend and make easier to use what is currently in /proc/fs/cifs/Stats
|
to extend and make easier to use what is currently in /proc/fs/cifs/Stats
|
||||||
|
|
||||||
n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
n) Add support for claims based ACLs ("DAC")
|
||||||
file attribute via chflags) and improve user space tools for managing and
|
|
||||||
viewing them.
|
|
||||||
|
|
||||||
o) mount helper GUI (to simplify the various configuration options on mount)
|
o) mount helper GUI (to simplify the various configuration options on mount)
|
||||||
|
|
||||||
|
@ -82,6 +86,8 @@ so far).
|
||||||
w) Add support for additional strong encryption types, and additional spnego
|
w) Add support for additional strong encryption types, and additional spnego
|
||||||
authentication mechanisms (see MS-SMB2)
|
authentication mechanisms (see MS-SMB2)
|
||||||
|
|
||||||
|
x) Finish support for SMB3.1.1 compression
|
||||||
|
|
||||||
KNOWN BUGS
|
KNOWN BUGS
|
||||||
====================================
|
====================================
|
||||||
See http://bugzilla.samba.org - search on product "CifsVFS" for
|
See http://bugzilla.samba.org - search on product "CifsVFS" for
|
||||||
|
|
|
@ -424,13 +424,24 @@ Statistics
|
||||||
Following minimum set of TLS-related statistics should be reported
|
Following minimum set of TLS-related statistics should be reported
|
||||||
by the driver:
|
by the driver:
|
||||||
|
|
||||||
* ``rx_tls_decrypted`` - number of successfully decrypted TLS segments
|
* ``rx_tls_decrypted_packets`` - number of successfully decrypted RX packets
|
||||||
* ``tx_tls_encrypted`` - number of in-order TLS segments passed to device
|
which were part of a TLS stream.
|
||||||
for encryption
|
* ``rx_tls_decrypted_bytes`` - number of TLS payload bytes in RX packets
|
||||||
|
which were successfully decrypted.
|
||||||
|
* ``tx_tls_encrypted_packets`` - number of TX packets passed to the device
|
||||||
|
for encryption of their TLS payload.
|
||||||
|
* ``tx_tls_encrypted_bytes`` - number of TLS payload bytes in TX packets
|
||||||
|
passed to the device for encryption.
|
||||||
|
* ``tx_tls_ctx`` - number of TLS TX HW offload contexts added to device for
|
||||||
|
encryption.
|
||||||
* ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
|
* ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
|
||||||
but did not arrive in the expected order
|
but did not arrive in the expected order.
|
||||||
* ``tx_tls_drop_no_sync_data`` - number of TX packets dropped because
|
* ``tx_tls_drop_no_sync_data`` - number of TX packets which were part of
|
||||||
they arrived out of order and associated record could not be found
|
a TLS stream dropped, because they arrived out of order and associated
|
||||||
|
record could not be found.
|
||||||
|
* ``tx_tls_drop_bypass_req`` - number of TX packets which were part of a TLS
|
||||||
|
stream dropped, because they contain both data that has been encrypted by
|
||||||
|
software and data that expects hardware crypto offload.
|
||||||
|
|
||||||
Notable corner cases, exceptions and additional requirements
|
Notable corner cases, exceptions and additional requirements
|
||||||
============================================================
|
============================================================
|
||||||
|
|
|
@ -237,7 +237,7 @@ The usage pattern is::
|
||||||
ret = hmm_range_snapshot(&range);
|
ret = hmm_range_snapshot(&range);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
if (ret == -EAGAIN) {
|
if (ret == -EBUSY) {
|
||||||
/*
|
/*
|
||||||
* No need to check hmm_range_wait_until_valid() return value
|
* No need to check hmm_range_wait_until_valid() return value
|
||||||
* on retry we will get proper error with hmm_range_snapshot()
|
* on retry we will get proper error with hmm_range_snapshot()
|
||||||
|
|
30
MAINTAINERS
30
MAINTAINERS
|
@ -2155,10 +2155,12 @@ F: Documentation/devicetree/bindings/arm/realtek.txt
|
||||||
|
|
||||||
ARM/RENESAS ARM64 ARCHITECTURE
|
ARM/RENESAS ARM64 ARCHITECTURE
|
||||||
M: Simon Horman <horms@verge.net.au>
|
M: Simon Horman <horms@verge.net.au>
|
||||||
|
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
M: Magnus Damm <magnus.damm@gmail.com>
|
M: Magnus Damm <magnus.damm@gmail.com>
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm64/boot/dts/renesas/
|
F: arch/arm64/boot/dts/renesas/
|
||||||
F: Documentation/devicetree/bindings/arm/renesas.yaml
|
F: Documentation/devicetree/bindings/arm/renesas.yaml
|
||||||
|
@ -2269,10 +2271,12 @@ F: drivers/media/platform/s5p-mfc/
|
||||||
|
|
||||||
ARM/SHMOBILE ARM ARCHITECTURE
|
ARM/SHMOBILE ARM ARCHITECTURE
|
||||||
M: Simon Horman <horms@verge.net.au>
|
M: Simon Horman <horms@verge.net.au>
|
||||||
|
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
M: Magnus Damm <magnus.damm@gmail.com>
|
M: Magnus Damm <magnus.damm@gmail.com>
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm/boot/dts/emev2*
|
F: arch/arm/boot/dts/emev2*
|
||||||
F: arch/arm/boot/dts/gr-peach*
|
F: arch/arm/boot/dts/gr-peach*
|
||||||
|
@ -6322,7 +6326,8 @@ F: Documentation/devicetree/bindings/counter/ftm-quaddec.txt
|
||||||
F: drivers/counter/ftm-quaddec.c
|
F: drivers/counter/ftm-quaddec.c
|
||||||
|
|
||||||
FLOPPY DRIVER
|
FLOPPY DRIVER
|
||||||
S: Orphan
|
M: Denis Efremov <efremov@linux.com>
|
||||||
|
S: Odd Fixes
|
||||||
L: linux-block@vger.kernel.org
|
L: linux-block@vger.kernel.org
|
||||||
F: drivers/block/floppy.c
|
F: drivers/block/floppy.c
|
||||||
|
|
||||||
|
@ -6339,7 +6344,7 @@ FPGA MANAGER FRAMEWORK
|
||||||
M: Moritz Fischer <mdf@kernel.org>
|
M: Moritz Fischer <mdf@kernel.org>
|
||||||
L: linux-fpga@vger.kernel.org
|
L: linux-fpga@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/atull/linux-fpga.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mdf/linux-fpga.git
|
||||||
Q: http://patchwork.kernel.org/project/linux-fpga/list/
|
Q: http://patchwork.kernel.org/project/linux-fpga/list/
|
||||||
F: Documentation/fpga/
|
F: Documentation/fpga/
|
||||||
F: Documentation/driver-api/fpga/
|
F: Documentation/driver-api/fpga/
|
||||||
|
@ -6372,7 +6377,7 @@ FRAMEBUFFER LAYER
|
||||||
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
T: git git://github.com/bzolnier/linux.git
|
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||||
Q: http://patchwork.kernel.org/project/linux-fbdev/list/
|
Q: http://patchwork.kernel.org/project/linux-fbdev/list/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/fb/
|
F: Documentation/fb/
|
||||||
|
@ -6822,13 +6827,6 @@ F: Documentation/filesystems/gfs2*.txt
|
||||||
F: fs/gfs2/
|
F: fs/gfs2/
|
||||||
F: include/uapi/linux/gfs2_ondisk.h
|
F: include/uapi/linux/gfs2_ondisk.h
|
||||||
|
|
||||||
GIGASET ISDN DRIVERS
|
|
||||||
M: Paul Bolle <pebolle@tiscali.nl>
|
|
||||||
L: gigaset307x-common@lists.sourceforge.net
|
|
||||||
W: http://gigaset307x.sourceforge.net/
|
|
||||||
S: Odd Fixes
|
|
||||||
F: drivers/staging/isdn/gigaset/
|
|
||||||
|
|
||||||
GNSS SUBSYSTEM
|
GNSS SUBSYSTEM
|
||||||
M: Johan Hovold <johan@kernel.org>
|
M: Johan Hovold <johan@kernel.org>
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/johan/gnss.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/johan/gnss.git
|
||||||
|
@ -8044,6 +8042,7 @@ S: Maintained
|
||||||
F: drivers/video/fbdev/i810/
|
F: drivers/video/fbdev/i810/
|
||||||
|
|
||||||
INTEL ASoC DRIVERS
|
INTEL ASoC DRIVERS
|
||||||
|
M: Cezary Rojewski <cezary.rojewski@intel.com>
|
||||||
M: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
M: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||||||
M: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
M: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
||||||
M: Jie Yang <yang.jie@linux.intel.com>
|
M: Jie Yang <yang.jie@linux.intel.com>
|
||||||
|
@ -11145,6 +11144,7 @@ L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: https://fedorahosted.org/dropwatch/
|
W: https://fedorahosted.org/dropwatch/
|
||||||
F: net/core/drop_monitor.c
|
F: net/core/drop_monitor.c
|
||||||
|
F: include/uapi/linux/net_dropmon.h
|
||||||
|
|
||||||
NETWORKING DRIVERS
|
NETWORKING DRIVERS
|
||||||
M: "David S. Miller" <davem@davemloft.net>
|
M: "David S. Miller" <davem@davemloft.net>
|
||||||
|
@ -11283,6 +11283,7 @@ M: Aviad Yehezkel <aviadye@mellanox.com>
|
||||||
M: Dave Watson <davejwatson@fb.com>
|
M: Dave Watson <davejwatson@fb.com>
|
||||||
M: John Fastabend <john.fastabend@gmail.com>
|
M: John Fastabend <john.fastabend@gmail.com>
|
||||||
M: Daniel Borkmann <daniel@iogearbox.net>
|
M: Daniel Borkmann <daniel@iogearbox.net>
|
||||||
|
M: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/tls/*
|
F: net/tls/*
|
||||||
|
@ -14017,6 +14018,12 @@ F: drivers/media/common/saa7146/
|
||||||
F: drivers/media/pci/saa7146/
|
F: drivers/media/pci/saa7146/
|
||||||
F: include/media/drv-intf/saa7146*
|
F: include/media/drv-intf/saa7146*
|
||||||
|
|
||||||
|
SAFESETID SECURITY MODULE
|
||||||
|
M: Micah Morton <mortonm@chromium.org>
|
||||||
|
S: Supported
|
||||||
|
F: security/safesetid/
|
||||||
|
F: Documentation/admin-guide/LSM/SafeSetID.rst
|
||||||
|
|
||||||
SAMSUNG AUDIO (ASoC) DRIVERS
|
SAMSUNG AUDIO (ASoC) DRIVERS
|
||||||
M: Krzysztof Kozlowski <krzk@kernel.org>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
M: Sangbeom Kim <sbkim73@samsung.com>
|
M: Sangbeom Kim <sbkim73@samsung.com>
|
||||||
|
@ -16079,7 +16086,7 @@ S: Maintained
|
||||||
F: drivers/net/ethernet/ti/netcp*
|
F: drivers/net/ethernet/ti/netcp*
|
||||||
|
|
||||||
TI PCM3060 ASoC CODEC DRIVER
|
TI PCM3060 ASoC CODEC DRIVER
|
||||||
M: Kirill Marinushkin <kmarinushkin@birdec.tech>
|
M: Kirill Marinushkin <kmarinushkin@birdec.com>
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/sound/pcm3060.txt
|
F: Documentation/devicetree/bindings/sound/pcm3060.txt
|
||||||
|
@ -17555,7 +17562,6 @@ M: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||||
M: Jesper Dangaard Brouer <hawk@kernel.org>
|
M: Jesper Dangaard Brouer <hawk@kernel.org>
|
||||||
M: John Fastabend <john.fastabend@gmail.com>
|
M: John Fastabend <john.fastabend@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: xdp-newbies@vger.kernel.org
|
|
||||||
L: bpf@vger.kernel.org
|
L: bpf@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: net/core/xdp.c
|
F: net/core/xdp.c
|
||||||
|
|
27
Makefile
27
Makefile
|
@ -2,7 +2,7 @@
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 3
|
PATCHLEVEL = 3
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc2
|
EXTRAVERSION = -rc4
|
||||||
NAME = Bobtail Squid
|
NAME = Bobtail Squid
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -419,6 +419,7 @@ NM = $(CROSS_COMPILE)nm
|
||||||
STRIP = $(CROSS_COMPILE)strip
|
STRIP = $(CROSS_COMPILE)strip
|
||||||
OBJCOPY = $(CROSS_COMPILE)objcopy
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
||||||
OBJDUMP = $(CROSS_COMPILE)objdump
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
||||||
|
OBJSIZE = $(CROSS_COMPILE)size
|
||||||
PAHOLE = pahole
|
PAHOLE = pahole
|
||||||
LEX = flex
|
LEX = flex
|
||||||
YACC = bison
|
YACC = bison
|
||||||
|
@ -472,11 +473,12 @@ KBUILD_CFLAGS_MODULE := -DMODULE
|
||||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||||
KBUILD_LDFLAGS :=
|
KBUILD_LDFLAGS :=
|
||||||
GCC_PLUGINS_CFLAGS :=
|
GCC_PLUGINS_CFLAGS :=
|
||||||
|
CLANG_FLAGS :=
|
||||||
|
|
||||||
export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
|
export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
|
||||||
export CPP AR NM STRIP OBJCOPY OBJDUMP PAHOLE KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS
|
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE PAHOLE LEX YACC AWK INSTALLKERNEL
|
||||||
export MAKE LEX YACC AWK INSTALLKERNEL PERL PYTHON PYTHON2 PYTHON3 UTS_MACHINE
|
export PERL PYTHON PYTHON2 PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
||||||
export HOSTCXX KBUILD_HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
|
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
||||||
|
|
||||||
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
||||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
|
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
|
||||||
|
@ -519,7 +521,7 @@ endif
|
||||||
|
|
||||||
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
|
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)
|
||||||
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
||||||
|
@ -844,7 +846,7 @@ NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||||
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
||||||
|
|
||||||
# Warn about unmarked fall-throughs in switch statement.
|
# Warn about unmarked fall-throughs in switch statement.
|
||||||
KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough=3,)
|
KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,)
|
||||||
|
|
||||||
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
|
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
|
||||||
KBUILD_CFLAGS += -Wvla
|
KBUILD_CFLAGS += -Wvla
|
||||||
|
@ -1001,6 +1003,8 @@ endif
|
||||||
|
|
||||||
PHONY += prepare0
|
PHONY += prepare0
|
||||||
|
|
||||||
|
export MODORDER := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order
|
||||||
|
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
|
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
|
||||||
|
|
||||||
|
@ -1770,13 +1774,22 @@ build-dir = $(patsubst %/,%,$(dir $(build-target)))
|
||||||
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
|
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
|
||||||
%.symtypes: prepare FORCE
|
%.symtypes: prepare FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
|
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target)
|
||||||
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
|
# For the single build of an in-tree module, use a temporary file to avoid
|
||||||
|
# the situation of modules_install installing an invalid modules.order.
|
||||||
|
%.ko: MODORDER := .modules.tmp
|
||||||
|
endif
|
||||||
|
%.ko: prepare FORCE
|
||||||
|
$(Q)$(MAKE) $(build)=$(build-dir) $(build-target:.ko=.mod)
|
||||||
|
$(Q)echo $(build-target) > $(MODORDER)
|
||||||
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
PHONY += /
|
PHONY += /
|
||||||
/: ./
|
/: ./
|
||||||
|
|
||||||
%/: prepare FORCE
|
%/: prepare FORCE
|
||||||
$(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir)
|
$(Q)$(MAKE) KBUILD_MODULES=1 $(build)=$(build-dir) need-modorder=1
|
||||||
|
|
||||||
# FIXME Should go into a make.lib or something
|
# FIXME Should go into a make.lib or something
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
|
|
|
@ -18,7 +18,9 @@ extern const struct dma_map_ops arm_coherent_dma_ops;
|
||||||
|
|
||||||
static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus)
|
static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus)
|
||||||
{
|
{
|
||||||
return IS_ENABLED(CONFIG_MMU) ? &arm_dma_ops : NULL;
|
if (IS_ENABLED(CONFIG_MMU) && !IS_ENABLED(CONFIG_ARM_LPAE))
|
||||||
|
return &arm_dma_ops;
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __arch_page_to_dma
|
#ifdef __arch_page_to_dma
|
||||||
|
|
|
@ -544,6 +544,7 @@ static int arch_build_bp_info(struct perf_event *bp,
|
||||||
if ((hw->ctrl.type != ARM_BREAKPOINT_EXECUTE)
|
if ((hw->ctrl.type != ARM_BREAKPOINT_EXECUTE)
|
||||||
&& max_watchpoint_len >= 8)
|
&& max_watchpoint_len >= 8)
|
||||||
break;
|
break;
|
||||||
|
/* Else, fall through */
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -608,10 +609,12 @@ int hw_breakpoint_arch_parse(struct perf_event *bp,
|
||||||
/* Allow halfword watchpoints and breakpoints. */
|
/* Allow halfword watchpoints and breakpoints. */
|
||||||
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2)
|
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2)
|
||||||
break;
|
break;
|
||||||
|
/* Else, fall through */
|
||||||
case 3:
|
case 3:
|
||||||
/* Allow single byte watchpoint. */
|
/* Allow single byte watchpoint. */
|
||||||
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1)
|
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1)
|
||||||
break;
|
break;
|
||||||
|
/* Else, fall through */
|
||||||
default:
|
default:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -861,6 +864,7 @@ static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr,
|
||||||
break;
|
break;
|
||||||
case ARM_ENTRY_ASYNC_WATCHPOINT:
|
case ARM_ENTRY_ASYNC_WATCHPOINT:
|
||||||
WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n");
|
WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n");
|
||||||
|
/* Fall through */
|
||||||
case ARM_ENTRY_SYNC_WATCHPOINT:
|
case ARM_ENTRY_SYNC_WATCHPOINT:
|
||||||
watchpoint_handler(addr, fsr, regs);
|
watchpoint_handler(addr, fsr, regs);
|
||||||
break;
|
break;
|
||||||
|
@ -909,6 +913,7 @@ static bool core_has_os_save_restore(void)
|
||||||
ARM_DBG_READ(c1, c1, 4, oslsr);
|
ARM_DBG_READ(c1, c1, 4, oslsr);
|
||||||
if (oslsr & ARM_OSLSR_OSLM0)
|
if (oslsr & ARM_OSLSR_OSLM0)
|
||||||
return true;
|
return true;
|
||||||
|
/* Else, fall through */
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -596,6 +596,7 @@ static int do_signal(struct pt_regs *regs, int syscall)
|
||||||
switch (retval) {
|
switch (retval) {
|
||||||
case -ERESTART_RESTARTBLOCK:
|
case -ERESTART_RESTARTBLOCK:
|
||||||
restart -= 2;
|
restart -= 2;
|
||||||
|
/* Fall through */
|
||||||
case -ERESTARTNOHAND:
|
case -ERESTARTNOHAND:
|
||||||
case -ERESTARTSYS:
|
case -ERESTARTSYS:
|
||||||
case -ERESTARTNOINTR:
|
case -ERESTARTNOINTR:
|
||||||
|
|
|
@ -651,13 +651,22 @@ int kvm_handle_cp14_64(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_coproc_regs(struct kvm_vcpu *vcpu,
|
static void reset_coproc_regs(struct kvm_vcpu *vcpu,
|
||||||
const struct coproc_reg *table, size_t num)
|
const struct coproc_reg *table, size_t num,
|
||||||
|
unsigned long *bmap)
|
||||||
{
|
{
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
if (table[i].reset)
|
if (table[i].reset) {
|
||||||
|
int reg = table[i].reg;
|
||||||
|
|
||||||
table[i].reset(vcpu, &table[i]);
|
table[i].reset(vcpu, &table[i]);
|
||||||
|
if (reg > 0 && reg < NR_CP15_REGS) {
|
||||||
|
set_bit(reg, bmap);
|
||||||
|
if (table[i].is_64bit)
|
||||||
|
set_bit(reg + 1, bmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct coproc_params decode_32bit_hsr(struct kvm_vcpu *vcpu)
|
static struct coproc_params decode_32bit_hsr(struct kvm_vcpu *vcpu)
|
||||||
|
@ -1432,17 +1441,15 @@ void kvm_reset_coprocs(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
size_t num;
|
size_t num;
|
||||||
const struct coproc_reg *table;
|
const struct coproc_reg *table;
|
||||||
|
DECLARE_BITMAP(bmap, NR_CP15_REGS) = { 0, };
|
||||||
/* Catch someone adding a register without putting in reset entry. */
|
|
||||||
memset(vcpu->arch.ctxt.cp15, 0x42, sizeof(vcpu->arch.ctxt.cp15));
|
|
||||||
|
|
||||||
/* Generic chip reset first (so target could override). */
|
/* Generic chip reset first (so target could override). */
|
||||||
reset_coproc_regs(vcpu, cp15_regs, ARRAY_SIZE(cp15_regs));
|
reset_coproc_regs(vcpu, cp15_regs, ARRAY_SIZE(cp15_regs), bmap);
|
||||||
|
|
||||||
table = get_target_table(vcpu->arch.target, &num);
|
table = get_target_table(vcpu->arch.target, &num);
|
||||||
reset_coproc_regs(vcpu, table, num);
|
reset_coproc_regs(vcpu, table, num, bmap);
|
||||||
|
|
||||||
for (num = 1; num < NR_CP15_REGS; num++)
|
for (num = 1; num < NR_CP15_REGS; num++)
|
||||||
WARN(vcpu_cp15(vcpu, num) == 0x42424242,
|
WARN(!test_bit(num, bmap),
|
||||||
"Didn't reset vcpu_cp15(vcpu, %zi)", num);
|
"Didn't reset vcpu_cp15(vcpu, %zi)", num);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ static int crunch_do(struct notifier_block *self, unsigned long cmd, void *t)
|
||||||
* FALLTHROUGH: Ensure we don't try to overwrite our newly
|
* FALLTHROUGH: Ensure we don't try to overwrite our newly
|
||||||
* initialised state information on the first fault.
|
* initialised state information on the first fault.
|
||||||
*/
|
*/
|
||||||
|
/* Fall through */
|
||||||
|
|
||||||
case THREAD_NOTIFY_EXIT:
|
case THREAD_NOTIFY_EXIT:
|
||||||
crunch_task_release(thread);
|
crunch_task_release(thread);
|
||||||
|
|
|
@ -70,7 +70,7 @@ static void __init tegra_cpu_reset_handler_enable(void)
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case -ENOSYS:
|
case -ENOSYS:
|
||||||
tegra_cpu_reset_handler_set(reset_address);
|
tegra_cpu_reset_handler_set(reset_address);
|
||||||
/* pass-through */
|
/* fall through */
|
||||||
case 0:
|
case 0:
|
||||||
is_enabled = true;
|
is_enabled = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -663,6 +663,11 @@ config ARM_LPAE
|
||||||
depends on MMU && CPU_32v7 && !CPU_32v6 && !CPU_32v5 && \
|
depends on MMU && CPU_32v7 && !CPU_32v6 && !CPU_32v5 && \
|
||||||
!CPU_32v4 && !CPU_32v3
|
!CPU_32v4 && !CPU_32v3
|
||||||
select PHYS_ADDR_T_64BIT
|
select PHYS_ADDR_T_64BIT
|
||||||
|
select SWIOTLB
|
||||||
|
select ARCH_HAS_DMA_COHERENT_TO_PFN
|
||||||
|
select ARCH_HAS_DMA_MMAP_PGPROT
|
||||||
|
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
||||||
|
select ARCH_HAS_SYNC_DMA_FOR_CPU
|
||||||
help
|
help
|
||||||
Say Y if you have an ARMv7 processor supporting the LPAE page
|
Say Y if you have an ARMv7 processor supporting the LPAE page
|
||||||
table format and you would like to access memory beyond the
|
table format and you would like to access memory beyond the
|
||||||
|
|
|
@ -695,7 +695,7 @@ thumb2arm(u16 tinstr)
|
||||||
return subset[(L<<1) | ((tinstr & (1<<8)) >> 8)] |
|
return subset[(L<<1) | ((tinstr & (1<<8)) >> 8)] |
|
||||||
(tinstr & 255); /* register_list */
|
(tinstr & 255); /* register_list */
|
||||||
}
|
}
|
||||||
/* Else fall through for illegal instruction case */
|
/* Else, fall through - for illegal instruction case */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return BAD_INSTR;
|
return BAD_INSTR;
|
||||||
|
@ -751,6 +751,8 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
|
||||||
case 0xe8e0:
|
case 0xe8e0:
|
||||||
case 0xe9e0:
|
case 0xe9e0:
|
||||||
poffset->un = (tinst2 & 0xff) << 2;
|
poffset->un = (tinst2 & 0xff) << 2;
|
||||||
|
/* Fall through */
|
||||||
|
|
||||||
case 0xe940:
|
case 0xe940:
|
||||||
case 0xe9c0:
|
case 0xe9c0:
|
||||||
return do_alignment_ldrdstrd;
|
return do_alignment_ldrdstrd;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/dma-noncoherent.h>
|
||||||
#include <linux/dma-contiguous.h>
|
#include <linux/dma-contiguous.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
@ -1125,6 +1126,19 @@ int arm_dma_supported(struct device *dev, u64 mask)
|
||||||
|
|
||||||
static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent)
|
static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* When CONFIG_ARM_LPAE is set, physical address can extend above
|
||||||
|
* 32-bits, which then can't be addressed by devices that only support
|
||||||
|
* 32-bit DMA.
|
||||||
|
* Use the generic dma-direct / swiotlb ops code in that case, as that
|
||||||
|
* handles bounce buffering for us.
|
||||||
|
*
|
||||||
|
* Note: this checks CONFIG_ARM_LPAE instead of CONFIG_SWIOTLB as the
|
||||||
|
* latter is also selected by the Xen code, but that code for now relies
|
||||||
|
* on non-NULL dev_dma_ops. To be cleaned up later.
|
||||||
|
*/
|
||||||
|
if (IS_ENABLED(CONFIG_ARM_LPAE))
|
||||||
|
return NULL;
|
||||||
return coherent ? &arm_coherent_dma_ops : &arm_dma_ops;
|
return coherent ? &arm_coherent_dma_ops : &arm_dma_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2329,6 +2343,9 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
|
||||||
const struct dma_map_ops *dma_ops;
|
const struct dma_map_ops *dma_ops;
|
||||||
|
|
||||||
dev->archdata.dma_coherent = coherent;
|
dev->archdata.dma_coherent = coherent;
|
||||||
|
#ifdef CONFIG_SWIOTLB
|
||||||
|
dev->dma_coherent = coherent;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't override the dma_ops if they have already been set. Ideally
|
* Don't override the dma_ops if they have already been set. Ideally
|
||||||
|
@ -2363,3 +2380,47 @@ void arch_teardown_dma_ops(struct device *dev)
|
||||||
/* Let arch_setup_dma_ops() start again from scratch upon re-probe */
|
/* Let arch_setup_dma_ops() start again from scratch upon re-probe */
|
||||||
set_dma_ops(dev, NULL);
|
set_dma_ops(dev, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SWIOTLB
|
||||||
|
void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr,
|
||||||
|
size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
__dma_page_cpu_to_dev(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
|
||||||
|
size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
|
||||||
|
size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
__dma_page_dev_to_cpu(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
|
||||||
|
size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
long arch_dma_coherent_to_pfn(struct device *dev, void *cpu_addr,
|
||||||
|
dma_addr_t dma_addr)
|
||||||
|
{
|
||||||
|
return dma_to_pfn(dev, dma_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot,
|
||||||
|
unsigned long attrs)
|
||||||
|
{
|
||||||
|
if (!dev_is_dma_coherent(dev))
|
||||||
|
return __get_dma_pgprot(attrs, prot);
|
||||||
|
return prot;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||||
|
gfp_t gfp, unsigned long attrs)
|
||||||
|
{
|
||||||
|
return __dma_alloc(dev, size, dma_handle, gfp,
|
||||||
|
__get_dma_pgprot(attrs, PAGE_KERNEL), false,
|
||||||
|
attrs, __builtin_return_address(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
|
||||||
|
dma_addr_t dma_handle, unsigned long attrs)
|
||||||
|
{
|
||||||
|
__arm_dma_free(dev, size, cpu_addr, dma_handle, attrs, false);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_SWIOTLB */
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/dma-contiguous.h>
|
#include <linux/dma-contiguous.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
#include <linux/stop_machine.h>
|
#include <linux/stop_machine.h>
|
||||||
|
#include <linux/swiotlb.h>
|
||||||
|
|
||||||
#include <asm/cp15.h>
|
#include <asm/cp15.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -463,6 +464,10 @@ static void __init free_highpages(void)
|
||||||
*/
|
*/
|
||||||
void __init mem_init(void)
|
void __init mem_init(void)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ARM_LPAE
|
||||||
|
swiotlb_init(1);
|
||||||
|
#endif
|
||||||
|
|
||||||
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
||||||
|
|
||||||
/* this will put all unused low memory onto the freelists */
|
/* this will put all unused low memory onto the freelists */
|
||||||
|
|
|
@ -388,17 +388,15 @@ void omap_set_dma_src_burst_mode(int lch, enum omap_dma_burst_mode burst_mode)
|
||||||
/*
|
/*
|
||||||
* not supported by current hardware on OMAP1
|
* not supported by current hardware on OMAP1
|
||||||
* w |= (0x03 << 7);
|
* w |= (0x03 << 7);
|
||||||
* fall through
|
|
||||||
*/
|
*/
|
||||||
|
/* fall through */
|
||||||
case OMAP_DMA_DATA_BURST_16:
|
case OMAP_DMA_DATA_BURST_16:
|
||||||
if (dma_omap2plus()) {
|
if (dma_omap2plus()) {
|
||||||
burst = 0x3;
|
burst = 0x3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*
|
/* OMAP1 don't support burst 16 */
|
||||||
* OMAP1 don't support burst 16
|
/* fall through */
|
||||||
* fall through
|
|
||||||
*/
|
|
||||||
default:
|
default:
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
@ -474,10 +472,8 @@ void omap_set_dma_dest_burst_mode(int lch, enum omap_dma_burst_mode burst_mode)
|
||||||
burst = 0x3;
|
burst = 0x3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*
|
/* OMAP1 don't support burst 16 */
|
||||||
* OMAP1 don't support burst 16
|
/* fall through */
|
||||||
* fall through
|
|
||||||
*/
|
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "Invalid DMA burst mode\n");
|
printk(KERN_ERR "Invalid DMA burst mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
|
|
|
@ -52,7 +52,7 @@ ifeq ($(CONFIG_GENERIC_COMPAT_VDSO), y)
|
||||||
|
|
||||||
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
||||||
$(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built)
|
$(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built)
|
||||||
else ifeq ($(CROSS_COMPILE_COMPAT),)
|
else ifeq ($(strip $(CROSS_COMPILE_COMPAT)),)
|
||||||
$(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built)
|
$(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built)
|
||||||
else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),)
|
else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),)
|
||||||
$(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT)
|
$(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT)
|
||||||
|
|
|
@ -155,6 +155,12 @@ static inline void gic_pmr_mask_irqs(void)
|
||||||
BUILD_BUG_ON(GICD_INT_DEF_PRI < (GIC_PRIO_IRQOFF |
|
BUILD_BUG_ON(GICD_INT_DEF_PRI < (GIC_PRIO_IRQOFF |
|
||||||
GIC_PRIO_PSR_I_SET));
|
GIC_PRIO_PSR_I_SET));
|
||||||
BUILD_BUG_ON(GICD_INT_DEF_PRI >= GIC_PRIO_IRQON);
|
BUILD_BUG_ON(GICD_INT_DEF_PRI >= GIC_PRIO_IRQON);
|
||||||
|
/*
|
||||||
|
* Need to make sure IRQON allows IRQs when SCR_EL3.FIQ is cleared
|
||||||
|
* and non-secure PMR accesses are not subject to the shifts that
|
||||||
|
* are applied to IRQ priorities
|
||||||
|
*/
|
||||||
|
BUILD_BUG_ON((0x80 | (GICD_INT_DEF_PRI >> 1)) >= GIC_PRIO_IRQON);
|
||||||
gic_write_pmr(GIC_PRIO_IRQOFF);
|
gic_write_pmr(GIC_PRIO_IRQOFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum ftr_type {
|
enum ftr_type {
|
||||||
FTR_EXACT, /* Use a predefined safe value */
|
FTR_EXACT, /* Use a predefined safe value */
|
||||||
FTR_LOWER_SAFE, /* Smaller value is safe */
|
FTR_LOWER_SAFE, /* Smaller value is safe */
|
||||||
FTR_HIGHER_SAFE,/* Bigger value is safe */
|
FTR_HIGHER_SAFE, /* Bigger value is safe */
|
||||||
|
FTR_HIGHER_OR_ZERO_SAFE, /* Bigger value is safe, but 0 is biggest */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FTR_STRICT true /* SANITY check strict matching required */
|
#define FTR_STRICT true /* SANITY check strict matching required */
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#define DAIF_PROCCTX 0
|
#define DAIF_PROCCTX 0
|
||||||
#define DAIF_PROCCTX_NOIRQ PSR_I_BIT
|
#define DAIF_PROCCTX_NOIRQ PSR_I_BIT
|
||||||
#define DAIF_ERRCTX (PSR_I_BIT | PSR_A_BIT)
|
#define DAIF_ERRCTX (PSR_I_BIT | PSR_A_BIT)
|
||||||
|
#define DAIF_MASK (PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT)
|
||||||
|
|
||||||
|
|
||||||
/* mask/save/unmask/restore all exceptions, including interrupts. */
|
/* mask/save/unmask/restore all exceptions, including interrupts. */
|
||||||
static inline void local_daif_mask(void)
|
static inline void local_daif_mask(void)
|
||||||
|
|
|
@ -105,7 +105,11 @@ static inline unsigned long efi_get_max_initrd_addr(unsigned long dram_base,
|
||||||
((protocol##_t *)instance)->f(instance, ##__VA_ARGS__)
|
((protocol##_t *)instance)->f(instance, ##__VA_ARGS__)
|
||||||
|
|
||||||
#define alloc_screen_info(x...) &screen_info
|
#define alloc_screen_info(x...) &screen_info
|
||||||
#define free_screen_info(x...)
|
|
||||||
|
static inline void free_screen_info(efi_system_table_t *sys_table_arg,
|
||||||
|
struct screen_info *si)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/* redeclare as 'hidden' so the compiler will generate relative references */
|
/* redeclare as 'hidden' so the compiler will generate relative references */
|
||||||
extern struct screen_info screen_info __attribute__((__visibility__("hidden")));
|
extern struct screen_info screen_info __attribute__((__visibility__("hidden")));
|
||||||
|
|
|
@ -316,9 +316,10 @@
|
||||||
|
|
||||||
#define kvm_arm_exception_class \
|
#define kvm_arm_exception_class \
|
||||||
ECN(UNKNOWN), ECN(WFx), ECN(CP15_32), ECN(CP15_64), ECN(CP14_MR), \
|
ECN(UNKNOWN), ECN(WFx), ECN(CP15_32), ECN(CP15_64), ECN(CP14_MR), \
|
||||||
ECN(CP14_LS), ECN(FP_ASIMD), ECN(CP10_ID), ECN(CP14_64), ECN(SVC64), \
|
ECN(CP14_LS), ECN(FP_ASIMD), ECN(CP10_ID), ECN(PAC), ECN(CP14_64), \
|
||||||
ECN(HVC64), ECN(SMC64), ECN(SYS64), ECN(IMP_DEF), ECN(IABT_LOW), \
|
ECN(SVC64), ECN(HVC64), ECN(SMC64), ECN(SYS64), ECN(SVE), \
|
||||||
ECN(IABT_CUR), ECN(PC_ALIGN), ECN(DABT_LOW), ECN(DABT_CUR), \
|
ECN(IMP_DEF), ECN(IABT_LOW), ECN(IABT_CUR), \
|
||||||
|
ECN(PC_ALIGN), ECN(DABT_LOW), ECN(DABT_CUR), \
|
||||||
ECN(SP_ALIGN), ECN(FP_EXC32), ECN(FP_EXC64), ECN(SERROR), \
|
ECN(SP_ALIGN), ECN(FP_EXC32), ECN(FP_EXC64), ECN(SERROR), \
|
||||||
ECN(BREAKPT_LOW), ECN(BREAKPT_CUR), ECN(SOFTSTP_LOW), \
|
ECN(BREAKPT_LOW), ECN(BREAKPT_CUR), ECN(SOFTSTP_LOW), \
|
||||||
ECN(SOFTSTP_CUR), ECN(WATCHPT_LOW), ECN(WATCHPT_CUR), \
|
ECN(SOFTSTP_CUR), ECN(WATCHPT_LOW), ECN(WATCHPT_CUR), \
|
||||||
|
|
|
@ -210,7 +210,11 @@ extern u64 vabits_user;
|
||||||
#define __tag_reset(addr) untagged_addr(addr)
|
#define __tag_reset(addr) untagged_addr(addr)
|
||||||
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
||||||
#else
|
#else
|
||||||
#define __tag_set(addr, tag) (addr)
|
static inline const void *__tag_set(const void *addr, u8 tag)
|
||||||
|
{
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
#define __tag_reset(addr) (addr)
|
#define __tag_reset(addr) (addr)
|
||||||
#define __tag_get(addr) 0
|
#define __tag_get(addr) 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -301,8 +305,8 @@ static inline void *phys_to_virt(phys_addr_t x)
|
||||||
#define page_to_virt(page) ({ \
|
#define page_to_virt(page) ({ \
|
||||||
unsigned long __addr = \
|
unsigned long __addr = \
|
||||||
((__page_to_voff(page)) | PAGE_OFFSET); \
|
((__page_to_voff(page)) | PAGE_OFFSET); \
|
||||||
unsigned long __addr_tag = \
|
const void *__addr_tag = \
|
||||||
__tag_set(__addr, page_kasan_tag(page)); \
|
__tag_set((void *)__addr, page_kasan_tag(page)); \
|
||||||
((void *)__addr_tag); \
|
((void *)__addr_tag); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ static inline pmd_t pmd_mkcont(pmd_t pmd)
|
||||||
|
|
||||||
static inline pte_t pte_mkdevmap(pte_t pte)
|
static inline pte_t pte_mkdevmap(pte_t pte)
|
||||||
{
|
{
|
||||||
return set_pte_bit(pte, __pgprot(PTE_DEVMAP));
|
return set_pte_bit(pte, __pgprot(PTE_DEVMAP | PTE_SPECIAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_pte(pte_t *ptep, pte_t pte)
|
static inline void set_pte(pte_t *ptep, pte_t pte)
|
||||||
|
@ -396,7 +396,10 @@ static inline int pmd_protnone(pmd_t pmd)
|
||||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||||
#define pmd_devmap(pmd) pte_devmap(pmd_pte(pmd))
|
#define pmd_devmap(pmd) pte_devmap(pmd_pte(pmd))
|
||||||
#endif
|
#endif
|
||||||
#define pmd_mkdevmap(pmd) pte_pmd(pte_mkdevmap(pmd_pte(pmd)))
|
static inline pmd_t pmd_mkdevmap(pmd_t pmd)
|
||||||
|
{
|
||||||
|
return pte_pmd(set_pte_bit(pmd_pte(pmd), __pgprot(PTE_DEVMAP)));
|
||||||
|
}
|
||||||
|
|
||||||
#define __pmd_to_phys(pmd) __pte_to_phys(pmd_pte(pmd))
|
#define __pmd_to_phys(pmd) __pte_to_phys(pmd_pte(pmd))
|
||||||
#define __phys_to_pmd_val(phys) __phys_to_pte_val(phys)
|
#define __phys_to_pmd_val(phys) __phys_to_pte_val(phys)
|
||||||
|
@ -447,8 +450,8 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
|
||||||
PMD_TYPE_SECT)
|
PMD_TYPE_SECT)
|
||||||
|
|
||||||
#if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3
|
#if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3
|
||||||
#define pud_sect(pud) (0)
|
static inline bool pud_sect(pud_t pud) { return false; }
|
||||||
#define pud_table(pud) (1)
|
static inline bool pud_table(pud_t pud) { return true; }
|
||||||
#else
|
#else
|
||||||
#define pud_sect(pud) ((pud_val(pud) & PUD_TYPE_MASK) == \
|
#define pud_sect(pud) ((pud_val(pud) & PUD_TYPE_MASK) == \
|
||||||
PUD_TYPE_SECT)
|
PUD_TYPE_SECT)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
* in the the priority mask, it indicates that PSR.I should be set and
|
* in the the priority mask, it indicates that PSR.I should be set and
|
||||||
* interrupt disabling temporarily does not rely on IRQ priorities.
|
* interrupt disabling temporarily does not rely on IRQ priorities.
|
||||||
*/
|
*/
|
||||||
#define GIC_PRIO_IRQON 0xc0
|
#define GIC_PRIO_IRQON 0xe0
|
||||||
#define GIC_PRIO_IRQOFF (GIC_PRIO_IRQON & ~0x80)
|
#define GIC_PRIO_IRQOFF (GIC_PRIO_IRQON & ~0x80)
|
||||||
#define GIC_PRIO_PSR_I_SET (1 << 4)
|
#define GIC_PRIO_PSR_I_SET (1 << 4)
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#define VDSO_HAS_CLOCK_GETRES 1
|
#define VDSO_HAS_CLOCK_GETRES 1
|
||||||
|
|
||||||
|
#define VDSO_HAS_32BIT_FALLBACK 1
|
||||||
|
|
||||||
static __always_inline
|
static __always_inline
|
||||||
int gettimeofday_fallback(struct __kernel_old_timeval *_tv,
|
int gettimeofday_fallback(struct __kernel_old_timeval *_tv,
|
||||||
struct timezone *_tz)
|
struct timezone *_tz)
|
||||||
|
@ -51,6 +53,23 @@ long clock_gettime_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __always_inline
|
||||||
|
long clock_gettime32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
|
||||||
|
{
|
||||||
|
register struct old_timespec32 *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_compat_clock_gettime;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static __always_inline
|
static __always_inline
|
||||||
int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
|
int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
|
||||||
{
|
{
|
||||||
|
@ -72,6 +91,27 @@ int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __always_inline
|
||||||
|
int clock_getres32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
|
||||||
|
{
|
||||||
|
register struct old_timespec32 *ts asm("r1") = _ts;
|
||||||
|
register clockid_t clkid asm("r0") = _clkid;
|
||||||
|
register long ret asm ("r0");
|
||||||
|
register long nr asm("r7") = __NR_compat_clock_getres;
|
||||||
|
|
||||||
|
/* The checks below are required for ABI consistency with arm */
|
||||||
|
if ((_clkid >= MAX_CLOCKS) && (_ts == NULL))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" swi #0\n"
|
||||||
|
: "=r" (ret)
|
||||||
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
||||||
{
|
{
|
||||||
u64 res;
|
u64 res;
|
||||||
|
|
|
@ -225,8 +225,8 @@ static const struct arm64_ftr_bits ftr_ctr[] = {
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_SAFE, CTR_CWG_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_SAFE, CTR_ERG_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
|
||||||
/*
|
/*
|
||||||
* Linux can handle differing I-cache policies. Userspace JITs will
|
* Linux can handle differing I-cache policies. Userspace JITs will
|
||||||
|
@ -468,6 +468,10 @@ static s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 new,
|
||||||
case FTR_LOWER_SAFE:
|
case FTR_LOWER_SAFE:
|
||||||
ret = new < cur ? new : cur;
|
ret = new < cur ? new : cur;
|
||||||
break;
|
break;
|
||||||
|
case FTR_HIGHER_OR_ZERO_SAFE:
|
||||||
|
if (!cur || !new)
|
||||||
|
break;
|
||||||
|
/* Fallthrough */
|
||||||
case FTR_HIGHER_SAFE:
|
case FTR_HIGHER_SAFE:
|
||||||
ret = new > cur ? new : cur;
|
ret = new > cur ? new : cur;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -207,16 +207,16 @@ static int call_step_hook(struct pt_regs *regs, unsigned int esr)
|
||||||
|
|
||||||
list = user_mode(regs) ? &user_step_hook : &kernel_step_hook;
|
list = user_mode(regs) ? &user_step_hook : &kernel_step_hook;
|
||||||
|
|
||||||
rcu_read_lock();
|
/*
|
||||||
|
* Since single-step exception disables interrupt, this function is
|
||||||
|
* entirely not preemptible, and we can use rcu list safely here.
|
||||||
|
*/
|
||||||
list_for_each_entry_rcu(hook, list, node) {
|
list_for_each_entry_rcu(hook, list, node) {
|
||||||
retval = hook->fn(regs, esr);
|
retval = hook->fn(regs, esr);
|
||||||
if (retval == DBG_HOOK_HANDLED)
|
if (retval == DBG_HOOK_HANDLED)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(call_step_hook);
|
NOKPROBE_SYMBOL(call_step_hook);
|
||||||
|
@ -305,14 +305,16 @@ static int call_break_hook(struct pt_regs *regs, unsigned int esr)
|
||||||
|
|
||||||
list = user_mode(regs) ? &user_break_hook : &kernel_break_hook;
|
list = user_mode(regs) ? &user_break_hook : &kernel_break_hook;
|
||||||
|
|
||||||
rcu_read_lock();
|
/*
|
||||||
|
* Since brk exception disables interrupt, this function is
|
||||||
|
* entirely not preemptible, and we can use rcu list safely here.
|
||||||
|
*/
|
||||||
list_for_each_entry_rcu(hook, list, node) {
|
list_for_each_entry_rcu(hook, list, node) {
|
||||||
unsigned int comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
unsigned int comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
||||||
|
|
||||||
if ((comment & ~hook->mask) == hook->imm)
|
if ((comment & ~hook->mask) == hook->imm)
|
||||||
fn = hook->fn;
|
fn = hook->fn;
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
||||||
return fn ? fn(regs, esr) : DBG_HOOK_ERROR;
|
return fn ? fn(regs, esr) : DBG_HOOK_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -536,13 +536,18 @@ int hw_breakpoint_arch_parse(struct perf_event *bp,
|
||||||
/* Aligned */
|
/* Aligned */
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
/* Allow single byte watchpoint. */
|
|
||||||
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1)
|
|
||||||
break;
|
|
||||||
case 2:
|
case 2:
|
||||||
/* Allow halfword watchpoints and breakpoints. */
|
/* Allow halfword watchpoints and breakpoints. */
|
||||||
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2)
|
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* Fallthrough */
|
||||||
|
case 3:
|
||||||
|
/* Allow single byte watchpoint. */
|
||||||
|
if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Fallthrough */
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,18 +314,21 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
||||||
/* MOVW instruction relocations. */
|
/* MOVW instruction relocations. */
|
||||||
case R_AARCH64_MOVW_UABS_G0_NC:
|
case R_AARCH64_MOVW_UABS_G0_NC:
|
||||||
overflow_check = false;
|
overflow_check = false;
|
||||||
|
/* Fall through */
|
||||||
case R_AARCH64_MOVW_UABS_G0:
|
case R_AARCH64_MOVW_UABS_G0:
|
||||||
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 0,
|
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 0,
|
||||||
AARCH64_INSN_IMM_MOVKZ);
|
AARCH64_INSN_IMM_MOVKZ);
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_MOVW_UABS_G1_NC:
|
case R_AARCH64_MOVW_UABS_G1_NC:
|
||||||
overflow_check = false;
|
overflow_check = false;
|
||||||
|
/* Fall through */
|
||||||
case R_AARCH64_MOVW_UABS_G1:
|
case R_AARCH64_MOVW_UABS_G1:
|
||||||
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 16,
|
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 16,
|
||||||
AARCH64_INSN_IMM_MOVKZ);
|
AARCH64_INSN_IMM_MOVKZ);
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_MOVW_UABS_G2_NC:
|
case R_AARCH64_MOVW_UABS_G2_NC:
|
||||||
overflow_check = false;
|
overflow_check = false;
|
||||||
|
/* Fall through */
|
||||||
case R_AARCH64_MOVW_UABS_G2:
|
case R_AARCH64_MOVW_UABS_G2:
|
||||||
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 32,
|
ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 32,
|
||||||
AARCH64_INSN_IMM_MOVKZ);
|
AARCH64_INSN_IMM_MOVKZ);
|
||||||
|
@ -393,6 +396,7 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_ADR_PREL_PG_HI21_NC:
|
case R_AARCH64_ADR_PREL_PG_HI21_NC:
|
||||||
overflow_check = false;
|
overflow_check = false;
|
||||||
|
/* Fall through */
|
||||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
case R_AARCH64_ADR_PREL_PG_HI21:
|
||||||
ovf = reloc_insn_adrp(me, sechdrs, loc, val);
|
ovf = reloc_insn_adrp(me, sechdrs, loc, val);
|
||||||
if (ovf && ovf != -ERANGE)
|
if (ovf && ovf != -ERANGE)
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/debug-monitors.h>
|
#include <asm/debug-monitors.h>
|
||||||
|
#include <asm/daifflags.h>
|
||||||
#include <asm/system_misc.h>
|
#include <asm/system_misc.h>
|
||||||
#include <asm/insn.h>
|
#include <asm/insn.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
@ -167,33 +168,6 @@ static void __kprobes set_current_kprobe(struct kprobe *p)
|
||||||
__this_cpu_write(current_kprobe, p);
|
__this_cpu_write(current_kprobe, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* When PSTATE.D is set (masked), then software step exceptions can not be
|
|
||||||
* generated.
|
|
||||||
* SPSR's D bit shows the value of PSTATE.D immediately before the
|
|
||||||
* exception was taken. PSTATE.D is set while entering into any exception
|
|
||||||
* mode, however software clears it for any normal (none-debug-exception)
|
|
||||||
* mode in the exception entry. Therefore, when we are entering into kprobe
|
|
||||||
* breakpoint handler from any normal mode then SPSR.D bit is already
|
|
||||||
* cleared, however it is set when we are entering from any debug exception
|
|
||||||
* mode.
|
|
||||||
* Since we always need to generate single step exception after a kprobe
|
|
||||||
* breakpoint exception therefore we need to clear it unconditionally, when
|
|
||||||
* we become sure that the current breakpoint exception is for kprobe.
|
|
||||||
*/
|
|
||||||
static void __kprobes
|
|
||||||
spsr_set_debug_flag(struct pt_regs *regs, int mask)
|
|
||||||
{
|
|
||||||
unsigned long spsr = regs->pstate;
|
|
||||||
|
|
||||||
if (mask)
|
|
||||||
spsr |= PSR_D_BIT;
|
|
||||||
else
|
|
||||||
spsr &= ~PSR_D_BIT;
|
|
||||||
|
|
||||||
regs->pstate = spsr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Interrupts need to be disabled before single-step mode is set, and not
|
* Interrupts need to be disabled before single-step mode is set, and not
|
||||||
* reenabled until after single-step mode ends.
|
* reenabled until after single-step mode ends.
|
||||||
|
@ -205,17 +179,17 @@ spsr_set_debug_flag(struct pt_regs *regs, int mask)
|
||||||
static void __kprobes kprobes_save_local_irqflag(struct kprobe_ctlblk *kcb,
|
static void __kprobes kprobes_save_local_irqflag(struct kprobe_ctlblk *kcb,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
kcb->saved_irqflag = regs->pstate;
|
kcb->saved_irqflag = regs->pstate & DAIF_MASK;
|
||||||
regs->pstate |= PSR_I_BIT;
|
regs->pstate |= PSR_I_BIT;
|
||||||
|
/* Unmask PSTATE.D for enabling software step exceptions. */
|
||||||
|
regs->pstate &= ~PSR_D_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __kprobes kprobes_restore_local_irqflag(struct kprobe_ctlblk *kcb,
|
static void __kprobes kprobes_restore_local_irqflag(struct kprobe_ctlblk *kcb,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
if (kcb->saved_irqflag & PSR_I_BIT)
|
regs->pstate &= ~DAIF_MASK;
|
||||||
regs->pstate |= PSR_I_BIT;
|
regs->pstate |= kcb->saved_irqflag;
|
||||||
else
|
|
||||||
regs->pstate &= ~PSR_I_BIT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __kprobes
|
static void __kprobes
|
||||||
|
@ -252,8 +226,6 @@ static void __kprobes setup_singlestep(struct kprobe *p,
|
||||||
|
|
||||||
set_ss_context(kcb, slot); /* mark pending ss */
|
set_ss_context(kcb, slot); /* mark pending ss */
|
||||||
|
|
||||||
spsr_set_debug_flag(regs, 0);
|
|
||||||
|
|
||||||
/* IRQs and single stepping do not mix well. */
|
/* IRQs and single stepping do not mix well. */
|
||||||
kprobes_save_local_irqflag(kcb, regs);
|
kprobes_save_local_irqflag(kcb, regs);
|
||||||
kernel_enable_single_step(regs);
|
kernel_enable_single_step(regs);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
|
||||||
#include <asm/stack_pointer.h>
|
#include <asm/stack_pointer.h>
|
||||||
#include <asm/stacktrace.h>
|
#include <asm/stacktrace.h>
|
||||||
|
@ -29,6 +30,7 @@ static int save_return_addr(struct stackframe *frame, void *d)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NOKPROBE_SYMBOL(save_return_addr);
|
||||||
|
|
||||||
void *return_address(unsigned int level)
|
void *return_address(unsigned int level)
|
||||||
{
|
{
|
||||||
|
@ -49,3 +51,4 @@ void *return_address(unsigned int level)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(return_address);
|
EXPORT_SYMBOL_GPL(return_address);
|
||||||
|
NOKPROBE_SYMBOL(return_address);
|
||||||
|
|
|
@ -152,8 +152,8 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
||||||
pr_crit("CPU%u: died during early boot\n", cpu);
|
pr_crit("CPU%u: died during early boot\n", cpu);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Fall through */
|
|
||||||
pr_crit("CPU%u: may not have shut down cleanly\n", cpu);
|
pr_crit("CPU%u: may not have shut down cleanly\n", cpu);
|
||||||
|
/* Fall through */
|
||||||
case CPU_STUCK_IN_KERNEL:
|
case CPU_STUCK_IN_KERNEL:
|
||||||
pr_crit("CPU%u: is stuck in kernel\n", cpu);
|
pr_crit("CPU%u: is stuck in kernel\n", cpu);
|
||||||
if (status & CPU_STUCK_REASON_52_BIT_VA)
|
if (status & CPU_STUCK_REASON_52_BIT_VA)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/kprobes.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/sched/debug.h>
|
#include <linux/sched/debug.h>
|
||||||
#include <linux/sched/task_stack.h>
|
#include <linux/sched/task_stack.h>
|
||||||
|
@ -111,6 +112,7 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
NOKPROBE_SYMBOL(unwind_frame);
|
||||||
|
|
||||||
void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
|
void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
|
||||||
int (*fn)(struct stackframe *, void *), void *data)
|
int (*fn)(struct stackframe *, void *), void *data)
|
||||||
|
@ -125,6 +127,7 @@ void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NOKPROBE_SYMBOL(walk_stackframe);
|
||||||
|
|
||||||
#ifdef CONFIG_STACKTRACE
|
#ifdef CONFIG_STACKTRACE
|
||||||
struct stack_trace_data {
|
struct stack_trace_data {
|
||||||
|
|
|
@ -733,6 +733,7 @@ static const char *esr_class_str[] = {
|
||||||
[ESR_ELx_EC_CP14_LS] = "CP14 LDC/STC",
|
[ESR_ELx_EC_CP14_LS] = "CP14 LDC/STC",
|
||||||
[ESR_ELx_EC_FP_ASIMD] = "ASIMD",
|
[ESR_ELx_EC_FP_ASIMD] = "ASIMD",
|
||||||
[ESR_ELx_EC_CP10_ID] = "CP10 MRC/VMRS",
|
[ESR_ELx_EC_CP10_ID] = "CP10 MRC/VMRS",
|
||||||
|
[ESR_ELx_EC_PAC] = "PAC",
|
||||||
[ESR_ELx_EC_CP14_64] = "CP14 MCRR/MRRC",
|
[ESR_ELx_EC_CP14_64] = "CP14 MCRR/MRRC",
|
||||||
[ESR_ELx_EC_ILL] = "PSTATE.IL",
|
[ESR_ELx_EC_ILL] = "PSTATE.IL",
|
||||||
[ESR_ELx_EC_SVC32] = "SVC (AArch32)",
|
[ESR_ELx_EC_SVC32] = "SVC (AArch32)",
|
||||||
|
|
|
@ -18,40 +18,70 @@
|
||||||
#define save_debug(ptr,reg,nr) \
|
#define save_debug(ptr,reg,nr) \
|
||||||
switch (nr) { \
|
switch (nr) { \
|
||||||
case 15: ptr[15] = read_debug(reg, 15); \
|
case 15: ptr[15] = read_debug(reg, 15); \
|
||||||
|
/* Fall through */ \
|
||||||
case 14: ptr[14] = read_debug(reg, 14); \
|
case 14: ptr[14] = read_debug(reg, 14); \
|
||||||
|
/* Fall through */ \
|
||||||
case 13: ptr[13] = read_debug(reg, 13); \
|
case 13: ptr[13] = read_debug(reg, 13); \
|
||||||
|
/* Fall through */ \
|
||||||
case 12: ptr[12] = read_debug(reg, 12); \
|
case 12: ptr[12] = read_debug(reg, 12); \
|
||||||
|
/* Fall through */ \
|
||||||
case 11: ptr[11] = read_debug(reg, 11); \
|
case 11: ptr[11] = read_debug(reg, 11); \
|
||||||
|
/* Fall through */ \
|
||||||
case 10: ptr[10] = read_debug(reg, 10); \
|
case 10: ptr[10] = read_debug(reg, 10); \
|
||||||
|
/* Fall through */ \
|
||||||
case 9: ptr[9] = read_debug(reg, 9); \
|
case 9: ptr[9] = read_debug(reg, 9); \
|
||||||
|
/* Fall through */ \
|
||||||
case 8: ptr[8] = read_debug(reg, 8); \
|
case 8: ptr[8] = read_debug(reg, 8); \
|
||||||
|
/* Fall through */ \
|
||||||
case 7: ptr[7] = read_debug(reg, 7); \
|
case 7: ptr[7] = read_debug(reg, 7); \
|
||||||
|
/* Fall through */ \
|
||||||
case 6: ptr[6] = read_debug(reg, 6); \
|
case 6: ptr[6] = read_debug(reg, 6); \
|
||||||
|
/* Fall through */ \
|
||||||
case 5: ptr[5] = read_debug(reg, 5); \
|
case 5: ptr[5] = read_debug(reg, 5); \
|
||||||
|
/* Fall through */ \
|
||||||
case 4: ptr[4] = read_debug(reg, 4); \
|
case 4: ptr[4] = read_debug(reg, 4); \
|
||||||
|
/* Fall through */ \
|
||||||
case 3: ptr[3] = read_debug(reg, 3); \
|
case 3: ptr[3] = read_debug(reg, 3); \
|
||||||
|
/* Fall through */ \
|
||||||
case 2: ptr[2] = read_debug(reg, 2); \
|
case 2: ptr[2] = read_debug(reg, 2); \
|
||||||
|
/* Fall through */ \
|
||||||
case 1: ptr[1] = read_debug(reg, 1); \
|
case 1: ptr[1] = read_debug(reg, 1); \
|
||||||
|
/* Fall through */ \
|
||||||
default: ptr[0] = read_debug(reg, 0); \
|
default: ptr[0] = read_debug(reg, 0); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define restore_debug(ptr,reg,nr) \
|
#define restore_debug(ptr,reg,nr) \
|
||||||
switch (nr) { \
|
switch (nr) { \
|
||||||
case 15: write_debug(ptr[15], reg, 15); \
|
case 15: write_debug(ptr[15], reg, 15); \
|
||||||
|
/* Fall through */ \
|
||||||
case 14: write_debug(ptr[14], reg, 14); \
|
case 14: write_debug(ptr[14], reg, 14); \
|
||||||
|
/* Fall through */ \
|
||||||
case 13: write_debug(ptr[13], reg, 13); \
|
case 13: write_debug(ptr[13], reg, 13); \
|
||||||
|
/* Fall through */ \
|
||||||
case 12: write_debug(ptr[12], reg, 12); \
|
case 12: write_debug(ptr[12], reg, 12); \
|
||||||
|
/* Fall through */ \
|
||||||
case 11: write_debug(ptr[11], reg, 11); \
|
case 11: write_debug(ptr[11], reg, 11); \
|
||||||
|
/* Fall through */ \
|
||||||
case 10: write_debug(ptr[10], reg, 10); \
|
case 10: write_debug(ptr[10], reg, 10); \
|
||||||
|
/* Fall through */ \
|
||||||
case 9: write_debug(ptr[9], reg, 9); \
|
case 9: write_debug(ptr[9], reg, 9); \
|
||||||
|
/* Fall through */ \
|
||||||
case 8: write_debug(ptr[8], reg, 8); \
|
case 8: write_debug(ptr[8], reg, 8); \
|
||||||
|
/* Fall through */ \
|
||||||
case 7: write_debug(ptr[7], reg, 7); \
|
case 7: write_debug(ptr[7], reg, 7); \
|
||||||
|
/* Fall through */ \
|
||||||
case 6: write_debug(ptr[6], reg, 6); \
|
case 6: write_debug(ptr[6], reg, 6); \
|
||||||
|
/* Fall through */ \
|
||||||
case 5: write_debug(ptr[5], reg, 5); \
|
case 5: write_debug(ptr[5], reg, 5); \
|
||||||
|
/* Fall through */ \
|
||||||
case 4: write_debug(ptr[4], reg, 4); \
|
case 4: write_debug(ptr[4], reg, 4); \
|
||||||
|
/* Fall through */ \
|
||||||
case 3: write_debug(ptr[3], reg, 3); \
|
case 3: write_debug(ptr[3], reg, 3); \
|
||||||
|
/* Fall through */ \
|
||||||
case 2: write_debug(ptr[2], reg, 2); \
|
case 2: write_debug(ptr[2], reg, 2); \
|
||||||
|
/* Fall through */ \
|
||||||
case 1: write_debug(ptr[1], reg, 1); \
|
case 1: write_debug(ptr[1], reg, 1); \
|
||||||
|
/* Fall through */ \
|
||||||
default: write_debug(ptr[0], reg, 0); \
|
default: write_debug(ptr[0], reg, 0); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,13 +178,18 @@ void vcpu_write_spsr32(struct kvm_vcpu *vcpu, unsigned long v)
|
||||||
switch (spsr_idx) {
|
switch (spsr_idx) {
|
||||||
case KVM_SPSR_SVC:
|
case KVM_SPSR_SVC:
|
||||||
write_sysreg_el1(v, SYS_SPSR);
|
write_sysreg_el1(v, SYS_SPSR);
|
||||||
|
break;
|
||||||
case KVM_SPSR_ABT:
|
case KVM_SPSR_ABT:
|
||||||
write_sysreg(v, spsr_abt);
|
write_sysreg(v, spsr_abt);
|
||||||
|
break;
|
||||||
case KVM_SPSR_UND:
|
case KVM_SPSR_UND:
|
||||||
write_sysreg(v, spsr_und);
|
write_sysreg(v, spsr_und);
|
||||||
|
break;
|
||||||
case KVM_SPSR_IRQ:
|
case KVM_SPSR_IRQ:
|
||||||
write_sysreg(v, spsr_irq);
|
write_sysreg(v, spsr_irq);
|
||||||
|
break;
|
||||||
case KVM_SPSR_FIQ:
|
case KVM_SPSR_FIQ:
|
||||||
write_sysreg(v, spsr_fiq);
|
write_sysreg(v, spsr_fiq);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -632,7 +632,7 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
|
||||||
*/
|
*/
|
||||||
val = ((pmcr & ~ARMV8_PMU_PMCR_MASK)
|
val = ((pmcr & ~ARMV8_PMU_PMCR_MASK)
|
||||||
| (ARMV8_PMU_PMCR_MASK & 0xdecafbad)) & (~ARMV8_PMU_PMCR_E);
|
| (ARMV8_PMU_PMCR_MASK & 0xdecafbad)) & (~ARMV8_PMU_PMCR_E);
|
||||||
__vcpu_sys_reg(vcpu, PMCR_EL0) = val;
|
__vcpu_sys_reg(vcpu, r->reg) = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool check_pmu_access_disabled(struct kvm_vcpu *vcpu, u64 flags)
|
static bool check_pmu_access_disabled(struct kvm_vcpu *vcpu, u64 flags)
|
||||||
|
@ -981,13 +981,13 @@ static bool access_pmuserenr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
|
||||||
/* Silly macro to expand the DBG{BCR,BVR,WVR,WCR}n_EL1 registers in one go */
|
/* Silly macro to expand the DBG{BCR,BVR,WVR,WCR}n_EL1 registers in one go */
|
||||||
#define DBG_BCR_BVR_WCR_WVR_EL1(n) \
|
#define DBG_BCR_BVR_WCR_WVR_EL1(n) \
|
||||||
{ SYS_DESC(SYS_DBGBVRn_EL1(n)), \
|
{ SYS_DESC(SYS_DBGBVRn_EL1(n)), \
|
||||||
trap_bvr, reset_bvr, n, 0, get_bvr, set_bvr }, \
|
trap_bvr, reset_bvr, 0, 0, get_bvr, set_bvr }, \
|
||||||
{ SYS_DESC(SYS_DBGBCRn_EL1(n)), \
|
{ SYS_DESC(SYS_DBGBCRn_EL1(n)), \
|
||||||
trap_bcr, reset_bcr, n, 0, get_bcr, set_bcr }, \
|
trap_bcr, reset_bcr, 0, 0, get_bcr, set_bcr }, \
|
||||||
{ SYS_DESC(SYS_DBGWVRn_EL1(n)), \
|
{ SYS_DESC(SYS_DBGWVRn_EL1(n)), \
|
||||||
trap_wvr, reset_wvr, n, 0, get_wvr, set_wvr }, \
|
trap_wvr, reset_wvr, 0, 0, get_wvr, set_wvr }, \
|
||||||
{ SYS_DESC(SYS_DBGWCRn_EL1(n)), \
|
{ SYS_DESC(SYS_DBGWCRn_EL1(n)), \
|
||||||
trap_wcr, reset_wcr, n, 0, get_wcr, set_wcr }
|
trap_wcr, reset_wcr, 0, 0, get_wcr, set_wcr }
|
||||||
|
|
||||||
/* Macro to expand the PMEVCNTRn_EL0 register */
|
/* Macro to expand the PMEVCNTRn_EL0 register */
|
||||||
#define PMU_PMEVCNTR_EL0(n) \
|
#define PMU_PMEVCNTR_EL0(n) \
|
||||||
|
@ -1540,7 +1540,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
|
||||||
{ SYS_DESC(SYS_CSSELR_EL1), access_csselr, reset_unknown, CSSELR_EL1 },
|
{ SYS_DESC(SYS_CSSELR_EL1), access_csselr, reset_unknown, CSSELR_EL1 },
|
||||||
{ SYS_DESC(SYS_CTR_EL0), access_ctr },
|
{ SYS_DESC(SYS_CTR_EL0), access_ctr },
|
||||||
|
|
||||||
{ SYS_DESC(SYS_PMCR_EL0), access_pmcr, reset_pmcr, },
|
{ SYS_DESC(SYS_PMCR_EL0), access_pmcr, reset_pmcr, PMCR_EL0 },
|
||||||
{ SYS_DESC(SYS_PMCNTENSET_EL0), access_pmcnten, reset_unknown, PMCNTENSET_EL0 },
|
{ SYS_DESC(SYS_PMCNTENSET_EL0), access_pmcnten, reset_unknown, PMCNTENSET_EL0 },
|
||||||
{ SYS_DESC(SYS_PMCNTENCLR_EL0), access_pmcnten, NULL, PMCNTENSET_EL0 },
|
{ SYS_DESC(SYS_PMCNTENCLR_EL0), access_pmcnten, NULL, PMCNTENSET_EL0 },
|
||||||
{ SYS_DESC(SYS_PMOVSCLR_EL0), access_pmovs, NULL, PMOVSSET_EL0 },
|
{ SYS_DESC(SYS_PMOVSCLR_EL0), access_pmovs, NULL, PMOVSSET_EL0 },
|
||||||
|
@ -2254,13 +2254,19 @@ static int emulate_sys_reg(struct kvm_vcpu *vcpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_sys_reg_descs(struct kvm_vcpu *vcpu,
|
static void reset_sys_reg_descs(struct kvm_vcpu *vcpu,
|
||||||
const struct sys_reg_desc *table, size_t num)
|
const struct sys_reg_desc *table, size_t num,
|
||||||
|
unsigned long *bmap)
|
||||||
{
|
{
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
if (table[i].reset)
|
if (table[i].reset) {
|
||||||
|
int reg = table[i].reg;
|
||||||
|
|
||||||
table[i].reset(vcpu, &table[i]);
|
table[i].reset(vcpu, &table[i]);
|
||||||
|
if (reg > 0 && reg < NR_SYS_REGS)
|
||||||
|
set_bit(reg, bmap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2774,18 +2780,16 @@ void kvm_reset_sys_regs(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
size_t num;
|
size_t num;
|
||||||
const struct sys_reg_desc *table;
|
const struct sys_reg_desc *table;
|
||||||
|
DECLARE_BITMAP(bmap, NR_SYS_REGS) = { 0, };
|
||||||
/* Catch someone adding a register without putting in reset entry. */
|
|
||||||
memset(&vcpu->arch.ctxt.sys_regs, 0x42, sizeof(vcpu->arch.ctxt.sys_regs));
|
|
||||||
|
|
||||||
/* Generic chip reset first (so target could override). */
|
/* Generic chip reset first (so target could override). */
|
||||||
reset_sys_reg_descs(vcpu, sys_reg_descs, ARRAY_SIZE(sys_reg_descs));
|
reset_sys_reg_descs(vcpu, sys_reg_descs, ARRAY_SIZE(sys_reg_descs), bmap);
|
||||||
|
|
||||||
table = get_target_table(vcpu->arch.target, true, &num);
|
table = get_target_table(vcpu->arch.target, true, &num);
|
||||||
reset_sys_reg_descs(vcpu, table, num);
|
reset_sys_reg_descs(vcpu, table, num, bmap);
|
||||||
|
|
||||||
for (num = 1; num < NR_SYS_REGS; num++) {
|
for (num = 1; num < NR_SYS_REGS; num++) {
|
||||||
if (WARN(__vcpu_sys_reg(vcpu, num) == 0x4242424242424242,
|
if (WARN(!test_bit(num, bmap),
|
||||||
"Didn't reset __vcpu_sys_reg(%zi)\n", num))
|
"Didn't reset __vcpu_sys_reg(%zi)\n", num))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -777,6 +777,53 @@ void __init hook_debug_fault_code(int nr,
|
||||||
debug_fault_info[nr].name = name;
|
debug_fault_info[nr].name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In debug exception context, we explicitly disable preemption despite
|
||||||
|
* having interrupts disabled.
|
||||||
|
* This serves two purposes: it makes it much less likely that we would
|
||||||
|
* accidentally schedule in exception context and it will force a warning
|
||||||
|
* if we somehow manage to schedule by accident.
|
||||||
|
*/
|
||||||
|
static void debug_exception_enter(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Tell lockdep we disabled irqs in entry.S. Do nothing if they were
|
||||||
|
* already disabled to preserve the last enabled/disabled addresses.
|
||||||
|
*/
|
||||||
|
if (interrupts_enabled(regs))
|
||||||
|
trace_hardirqs_off();
|
||||||
|
|
||||||
|
if (user_mode(regs)) {
|
||||||
|
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* We might have interrupted pretty much anything. In
|
||||||
|
* fact, if we're a debug exception, we can even interrupt
|
||||||
|
* NMI processing. We don't want this code makes in_nmi()
|
||||||
|
* to return true, but we need to notify RCU.
|
||||||
|
*/
|
||||||
|
rcu_nmi_enter();
|
||||||
|
}
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
|
|
||||||
|
/* This code is a bit fragile. Test it. */
|
||||||
|
RCU_LOCKDEP_WARN(!rcu_is_watching(), "exception_enter didn't work");
|
||||||
|
}
|
||||||
|
NOKPROBE_SYMBOL(debug_exception_enter);
|
||||||
|
|
||||||
|
static void debug_exception_exit(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
preempt_enable_no_resched();
|
||||||
|
|
||||||
|
if (!user_mode(regs))
|
||||||
|
rcu_nmi_exit();
|
||||||
|
|
||||||
|
if (interrupts_enabled(regs))
|
||||||
|
trace_hardirqs_on();
|
||||||
|
}
|
||||||
|
NOKPROBE_SYMBOL(debug_exception_exit);
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_1463225
|
#ifdef CONFIG_ARM64_ERRATUM_1463225
|
||||||
DECLARE_PER_CPU(int, __in_cortex_a76_erratum_1463225_wa);
|
DECLARE_PER_CPU(int, __in_cortex_a76_erratum_1463225_wa);
|
||||||
|
|
||||||
|
@ -817,12 +864,7 @@ asmlinkage void __exception do_debug_exception(unsigned long addr_if_watchpoint,
|
||||||
if (cortex_a76_erratum_1463225_debug_handler(regs))
|
if (cortex_a76_erratum_1463225_debug_handler(regs))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
debug_exception_enter(regs);
|
||||||
* Tell lockdep we disabled irqs in entry.S. Do nothing if they were
|
|
||||||
* already disabled to preserve the last enabled/disabled addresses.
|
|
||||||
*/
|
|
||||||
if (interrupts_enabled(regs))
|
|
||||||
trace_hardirqs_off();
|
|
||||||
|
|
||||||
if (user_mode(regs) && !is_ttbr0_addr(pc))
|
if (user_mode(regs) && !is_ttbr0_addr(pc))
|
||||||
arm64_apply_bp_hardening();
|
arm64_apply_bp_hardening();
|
||||||
|
@ -832,7 +874,6 @@ asmlinkage void __exception do_debug_exception(unsigned long addr_if_watchpoint,
|
||||||
inf->sig, inf->code, (void __user *)pc, esr);
|
inf->sig, inf->code, (void __user *)pc, esr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interrupts_enabled(regs))
|
debug_exception_exit(regs);
|
||||||
trace_hardirqs_on();
|
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(do_debug_exception);
|
NOKPROBE_SYMBOL(do_debug_exception);
|
||||||
|
|
|
@ -398,6 +398,7 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
|
||||||
default:
|
default:
|
||||||
dev_err(dev, "Invalid ref_clk %u, using 100000000 instead\n",
|
dev_err(dev, "Invalid ref_clk %u, using 100000000 instead\n",
|
||||||
clock_rate);
|
clock_rate);
|
||||||
|
/* fall through */
|
||||||
case 100000000:
|
case 100000000:
|
||||||
mpll_mul = 0x19;
|
mpll_mul = 0x19;
|
||||||
if (ref_clk_sel < 2)
|
if (ref_clk_sel < 2)
|
||||||
|
|
|
@ -69,6 +69,8 @@ static int __populate_cache_leaves(unsigned int cpu)
|
||||||
if (c->tcache.waysize)
|
if (c->tcache.waysize)
|
||||||
populate_cache(tcache, this_leaf, 3, CACHE_TYPE_UNIFIED);
|
populate_cache(tcache, this_leaf, 3, CACHE_TYPE_UNIFIED);
|
||||||
|
|
||||||
|
this_cpu_ci->cpu_map_populated = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,8 @@ void __init setup_pit_timer(void)
|
||||||
|
|
||||||
static int __init init_pit_clocksource(void)
|
static int __init init_pit_clocksource(void)
|
||||||
{
|
{
|
||||||
if (num_possible_cpus() > 1) /* PIT does not scale! */
|
if (num_possible_cpus() > 1 || /* PIT does not scale! */
|
||||||
|
!clockevent_state_periodic(&i8253_clockevent))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return clocksource_i8253_init();
|
return clocksource_i8253_init();
|
||||||
|
|
|
@ -140,6 +140,7 @@ static int kvm_compute_return_epc(struct kvm_vcpu *vcpu, unsigned long instpc,
|
||||||
/* These are unconditional and in j_format. */
|
/* These are unconditional and in j_format. */
|
||||||
case jal_op:
|
case jal_op:
|
||||||
arch->gprs[31] = instpc + 8;
|
arch->gprs[31] = instpc + 8;
|
||||||
|
/* fall through */
|
||||||
case j_op:
|
case j_op:
|
||||||
epc += 4;
|
epc += 4;
|
||||||
epc >>= 28;
|
epc >>= 28;
|
||||||
|
|
|
@ -150,16 +150,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool kvm_arch_has_vcpu_debugfs(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvm_mips_free_vcpus(struct kvm *kvm)
|
void kvm_mips_free_vcpus(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
|
@ -172,12 +172,15 @@ static void mipsxx_cpu_setup(void *args)
|
||||||
case 4:
|
case 4:
|
||||||
w_c0_perfctrl3(0);
|
w_c0_perfctrl3(0);
|
||||||
w_c0_perfcntr3(reg.counter[3]);
|
w_c0_perfcntr3(reg.counter[3]);
|
||||||
|
/* fall through */
|
||||||
case 3:
|
case 3:
|
||||||
w_c0_perfctrl2(0);
|
w_c0_perfctrl2(0);
|
||||||
w_c0_perfcntr2(reg.counter[2]);
|
w_c0_perfcntr2(reg.counter[2]);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
w_c0_perfctrl1(0);
|
w_c0_perfctrl1(0);
|
||||||
w_c0_perfcntr1(reg.counter[1]);
|
w_c0_perfcntr1(reg.counter[1]);
|
||||||
|
/* fall through */
|
||||||
case 1:
|
case 1:
|
||||||
w_c0_perfctrl0(0);
|
w_c0_perfctrl0(0);
|
||||||
w_c0_perfcntr0(reg.counter[0]);
|
w_c0_perfcntr0(reg.counter[0]);
|
||||||
|
@ -195,10 +198,13 @@ static void mipsxx_cpu_start(void *args)
|
||||||
switch (counters) {
|
switch (counters) {
|
||||||
case 4:
|
case 4:
|
||||||
w_c0_perfctrl3(WHAT | reg.control[3]);
|
w_c0_perfctrl3(WHAT | reg.control[3]);
|
||||||
|
/* fall through */
|
||||||
case 3:
|
case 3:
|
||||||
w_c0_perfctrl2(WHAT | reg.control[2]);
|
w_c0_perfctrl2(WHAT | reg.control[2]);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
w_c0_perfctrl1(WHAT | reg.control[1]);
|
w_c0_perfctrl1(WHAT | reg.control[1]);
|
||||||
|
/* fall through */
|
||||||
case 1:
|
case 1:
|
||||||
w_c0_perfctrl0(WHAT | reg.control[0]);
|
w_c0_perfctrl0(WHAT | reg.control[0]);
|
||||||
}
|
}
|
||||||
|
@ -215,10 +221,13 @@ static void mipsxx_cpu_stop(void *args)
|
||||||
switch (counters) {
|
switch (counters) {
|
||||||
case 4:
|
case 4:
|
||||||
w_c0_perfctrl3(0);
|
w_c0_perfctrl3(0);
|
||||||
|
/* fall through */
|
||||||
case 3:
|
case 3:
|
||||||
w_c0_perfctrl2(0);
|
w_c0_perfctrl2(0);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
w_c0_perfctrl1(0);
|
w_c0_perfctrl1(0);
|
||||||
|
/* fall through */
|
||||||
case 1:
|
case 1:
|
||||||
w_c0_perfctrl0(0);
|
w_c0_perfctrl0(0);
|
||||||
}
|
}
|
||||||
|
@ -236,6 +245,7 @@ static int mipsxx_perfcount_handler(void)
|
||||||
|
|
||||||
switch (counters) {
|
switch (counters) {
|
||||||
#define HANDLE_COUNTER(n) \
|
#define HANDLE_COUNTER(n) \
|
||||||
|
/* fall through */ \
|
||||||
case n + 1: \
|
case n + 1: \
|
||||||
control = r_c0_perfctrl ## n(); \
|
control = r_c0_perfctrl ## n(); \
|
||||||
counter = r_c0_perfcntr ## n(); \
|
counter = r_c0_perfcntr ## n(); \
|
||||||
|
@ -297,12 +307,15 @@ static void reset_counters(void *arg)
|
||||||
case 4:
|
case 4:
|
||||||
w_c0_perfctrl3(0);
|
w_c0_perfctrl3(0);
|
||||||
w_c0_perfcntr3(0);
|
w_c0_perfcntr3(0);
|
||||||
|
/* fall through */
|
||||||
case 3:
|
case 3:
|
||||||
w_c0_perfctrl2(0);
|
w_c0_perfctrl2(0);
|
||||||
w_c0_perfcntr2(0);
|
w_c0_perfcntr2(0);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
w_c0_perfctrl1(0);
|
w_c0_perfctrl1(0);
|
||||||
w_c0_perfcntr1(0);
|
w_c0_perfcntr1(0);
|
||||||
|
/* fall through */
|
||||||
case 1:
|
case 1:
|
||||||
w_c0_perfctrl0(0);
|
w_c0_perfctrl0(0);
|
||||||
w_c0_perfcntr0(0);
|
w_c0_perfcntr0(0);
|
||||||
|
|
|
@ -474,6 +474,7 @@ static int bcm63xx_pcie_can_access(struct pci_bus *bus, int devfn)
|
||||||
if (PCI_SLOT(devfn) == 0)
|
if (PCI_SLOT(devfn) == 0)
|
||||||
return bcm_pcie_readl(PCIE_DLSTATUS_REG)
|
return bcm_pcie_readl(PCIE_DLSTATUS_REG)
|
||||||
& DLSTATUS_PHYLINKUP;
|
& DLSTATUS_PHYLINKUP;
|
||||||
|
/* else, fall through */
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#if _MIPS_SIM != _MIPS_SIM_ABI64 && defined(CONFIG_64BIT)
|
#if _MIPS_SIM != _MIPS_SIM_ABI64 && defined(CONFIG_64BIT)
|
||||||
|
|
||||||
/* Building 32-bit VDSO for the 64-bit kernel. Fake a 32-bit Kconfig. */
|
/* Building 32-bit VDSO for the 64-bit kernel. Fake a 32-bit Kconfig. */
|
||||||
|
#define BUILD_VDSO32_64
|
||||||
#undef CONFIG_64BIT
|
#undef CONFIG_64BIT
|
||||||
#define CONFIG_32BIT 1
|
#define CONFIG_32BIT 1
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
|
|
||||||
KBUILD_IMAGE := vmlinuz
|
KBUILD_IMAGE := vmlinuz
|
||||||
|
|
||||||
KBUILD_DEFCONFIG := default_defconfig
|
|
||||||
|
|
||||||
NM = sh $(srctree)/arch/parisc/nm
|
NM = sh $(srctree)/arch/parisc/nm
|
||||||
CHECKFLAGS += -D__hppa__=1
|
CHECKFLAGS += -D__hppa__=1
|
||||||
LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
|
LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
|
||||||
|
@ -182,5 +180,8 @@ define archhelp
|
||||||
@echo ' zinstall - Install compressed vmlinuz kernel'
|
@echo ' zinstall - Install compressed vmlinuz kernel'
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
archclean:
|
||||||
|
$(Q)$(MAKE) $(clean)=$(boot)
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/parisc/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/parisc/kernel/syscalls all
|
||||||
|
|
|
@ -12,6 +12,7 @@ UBSAN_SANITIZE := n
|
||||||
targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
|
targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
|
||||||
targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4
|
targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4
|
||||||
targets += misc.o piggy.o sizes.h head.o real2.o firmware.o
|
targets += misc.o piggy.o sizes.h head.o real2.o firmware.o
|
||||||
|
targets += real2.S firmware.c
|
||||||
|
|
||||||
KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER
|
KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER
|
||||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||||
|
@ -55,7 +56,8 @@ $(obj)/misc.o: $(obj)/sizes.h
|
||||||
CPPFLAGS_vmlinux.lds += -I$(objtree)/$(obj) -DBOOTLOADER
|
CPPFLAGS_vmlinux.lds += -I$(objtree)/$(obj) -DBOOTLOADER
|
||||||
$(obj)/vmlinux.lds: $(obj)/sizes.h
|
$(obj)/vmlinux.lds: $(obj)/sizes.h
|
||||||
|
|
||||||
$(obj)/vmlinux.bin: vmlinux
|
OBJCOPYFLAGS_vmlinux.bin := -R .comment -R .note -S
|
||||||
|
$(obj)/vmlinux.bin: vmlinux FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
vmlinux.bin.all-y := $(obj)/vmlinux.bin
|
vmlinux.bin.all-y := $(obj)/vmlinux.bin
|
||||||
|
|
|
@ -48,8 +48,8 @@ SECTIONS
|
||||||
*(.rodata.compressed)
|
*(.rodata.compressed)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* bootloader code and data starts behind area of extracted kernel */
|
/* bootloader code and data starts at least behind area of extracted kernel */
|
||||||
. = (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START);
|
. = MAX(ABSOLUTE(.), (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
|
||||||
|
|
||||||
/* align on next page boundary */
|
/* align on next page boundary */
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
|
|
|
@ -181,8 +181,9 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
|
||||||
for (i = 0; i < ARRAY_SIZE(insn); i++)
|
for (i = 0; i < ARRAY_SIZE(insn); i++)
|
||||||
insn[i] = INSN_NOP;
|
insn[i] = INSN_NOP;
|
||||||
|
|
||||||
|
__patch_text((void *)rec->ip, INSN_NOP);
|
||||||
__patch_text_multiple((void *)rec->ip + 4 - sizeof(insn),
|
__patch_text_multiple((void *)rec->ip + 4 - sizeof(insn),
|
||||||
insn, sizeof(insn));
|
insn, sizeof(insn)-4);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,3 +18,4 @@ obj-y := frnd.o driver.o decode_exc.o fpudispatch.o denormal.o \
|
||||||
# other very old or stripped-down PA-RISC CPUs -- not currently supported
|
# other very old or stripped-down PA-RISC CPUs -- not currently supported
|
||||||
|
|
||||||
obj-$(CONFIG_MATH_EMULATION) += unimplemented-math-emulation.o
|
obj-$(CONFIG_MATH_EMULATION) += unimplemented-math-emulation.o
|
||||||
|
CFLAGS_REMOVE_fpudispatch.o = -Wimplicit-fallthrough
|
||||||
|
|
|
@ -66,6 +66,7 @@ parisc_acctyp(unsigned long code, unsigned int inst)
|
||||||
case 0x30000000: /* coproc2 */
|
case 0x30000000: /* coproc2 */
|
||||||
if (bit22set(inst))
|
if (bit22set(inst))
|
||||||
return VM_WRITE;
|
return VM_WRITE;
|
||||||
|
/* fall through */
|
||||||
|
|
||||||
case 0x0: /* indexed/memory management */
|
case 0x0: /* indexed/memory management */
|
||||||
if (bit22set(inst)) {
|
if (bit22set(inst)) {
|
||||||
|
|
|
@ -107,22 +107,22 @@ extern void _set_L3CR(unsigned long);
|
||||||
|
|
||||||
static inline void dcbz(void *addr)
|
static inline void dcbz(void *addr)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("dcbz %y0" : : "Z"(*(u8 *)addr) : "memory");
|
__asm__ __volatile__ ("dcbz 0, %0" : : "r"(addr) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dcbi(void *addr)
|
static inline void dcbi(void *addr)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("dcbi %y0" : : "Z"(*(u8 *)addr) : "memory");
|
__asm__ __volatile__ ("dcbi 0, %0" : : "r"(addr) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dcbf(void *addr)
|
static inline void dcbf(void *addr)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("dcbf %y0" : : "Z"(*(u8 *)addr) : "memory");
|
__asm__ __volatile__ ("dcbf 0, %0" : : "r"(addr) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dcbst(void *addr)
|
static inline void dcbst(void *addr)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("dcbst %y0" : : "Z"(*(u8 *)addr) : "memory");
|
__asm__ __volatile__ ("dcbst 0, %0" : : "r"(addr) : "memory");
|
||||||
}
|
}
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#define __ARCH_WANT_SYS_FORK
|
#define __ARCH_WANT_SYS_FORK
|
||||||
#define __ARCH_WANT_SYS_VFORK
|
#define __ARCH_WANT_SYS_VFORK
|
||||||
#define __ARCH_WANT_SYS_CLONE
|
#define __ARCH_WANT_SYS_CLONE
|
||||||
|
#define __ARCH_WANT_SYS_CLONE3
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* _ASM_POWERPC_UNISTD_H_ */
|
#endif /* _ASM_POWERPC_UNISTD_H_ */
|
||||||
|
|
|
@ -176,9 +176,11 @@ static int emulate_spe(struct pt_regs *regs, unsigned int reg,
|
||||||
ret |= __get_user_inatomic(temp.v[1], p++);
|
ret |= __get_user_inatomic(temp.v[1], p++);
|
||||||
ret |= __get_user_inatomic(temp.v[2], p++);
|
ret |= __get_user_inatomic(temp.v[2], p++);
|
||||||
ret |= __get_user_inatomic(temp.v[3], p++);
|
ret |= __get_user_inatomic(temp.v[3], p++);
|
||||||
|
/* fall through */
|
||||||
case 4:
|
case 4:
|
||||||
ret |= __get_user_inatomic(temp.v[4], p++);
|
ret |= __get_user_inatomic(temp.v[4], p++);
|
||||||
ret |= __get_user_inatomic(temp.v[5], p++);
|
ret |= __get_user_inatomic(temp.v[5], p++);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
ret |= __get_user_inatomic(temp.v[6], p++);
|
ret |= __get_user_inatomic(temp.v[6], p++);
|
||||||
ret |= __get_user_inatomic(temp.v[7], p++);
|
ret |= __get_user_inatomic(temp.v[7], p++);
|
||||||
|
@ -259,9 +261,11 @@ static int emulate_spe(struct pt_regs *regs, unsigned int reg,
|
||||||
ret |= __put_user_inatomic(data.v[1], p++);
|
ret |= __put_user_inatomic(data.v[1], p++);
|
||||||
ret |= __put_user_inatomic(data.v[2], p++);
|
ret |= __put_user_inatomic(data.v[2], p++);
|
||||||
ret |= __put_user_inatomic(data.v[3], p++);
|
ret |= __put_user_inatomic(data.v[3], p++);
|
||||||
|
/* fall through */
|
||||||
case 4:
|
case 4:
|
||||||
ret |= __put_user_inatomic(data.v[4], p++);
|
ret |= __put_user_inatomic(data.v[4], p++);
|
||||||
ret |= __put_user_inatomic(data.v[5], p++);
|
ret |= __put_user_inatomic(data.v[5], p++);
|
||||||
|
/* fall through */
|
||||||
case 2:
|
case 2:
|
||||||
ret |= __put_user_inatomic(data.v[6], p++);
|
ret |= __put_user_inatomic(data.v[6], p++);
|
||||||
ret |= __put_user_inatomic(data.v[7], p++);
|
ret |= __put_user_inatomic(data.v[7], p++);
|
||||||
|
|
|
@ -597,6 +597,14 @@ ppc_clone:
|
||||||
stw r0,_TRAP(r1) /* register set saved */
|
stw r0,_TRAP(r1) /* register set saved */
|
||||||
b sys_clone
|
b sys_clone
|
||||||
|
|
||||||
|
.globl ppc_clone3
|
||||||
|
ppc_clone3:
|
||||||
|
SAVE_NVGPRS(r1)
|
||||||
|
lwz r0,_TRAP(r1)
|
||||||
|
rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */
|
||||||
|
stw r0,_TRAP(r1) /* register set saved */
|
||||||
|
b sys_clone3
|
||||||
|
|
||||||
.globl ppc_swapcontext
|
.globl ppc_swapcontext
|
||||||
ppc_swapcontext:
|
ppc_swapcontext:
|
||||||
SAVE_NVGPRS(r1)
|
SAVE_NVGPRS(r1)
|
||||||
|
|
|
@ -487,6 +487,11 @@ _GLOBAL(ppc_clone)
|
||||||
bl sys_clone
|
bl sys_clone
|
||||||
b .Lsyscall_exit
|
b .Lsyscall_exit
|
||||||
|
|
||||||
|
_GLOBAL(ppc_clone3)
|
||||||
|
bl save_nvgprs
|
||||||
|
bl sys_clone3
|
||||||
|
b .Lsyscall_exit
|
||||||
|
|
||||||
_GLOBAL(ppc32_swapcontext)
|
_GLOBAL(ppc32_swapcontext)
|
||||||
bl save_nvgprs
|
bl save_nvgprs
|
||||||
bl compat_sys_swapcontext
|
bl compat_sys_swapcontext
|
||||||
|
|
|
@ -516,4 +516,4 @@
|
||||||
432 common fsmount sys_fsmount
|
432 common fsmount sys_fsmount
|
||||||
433 common fspick sys_fspick
|
433 common fspick sys_fspick
|
||||||
434 common pidfd_open sys_pidfd_open
|
434 common pidfd_open sys_pidfd_open
|
||||||
# 435 reserved for clone3
|
435 nospu clone3 ppc_clone3
|
||||||
|
|
|
@ -239,6 +239,7 @@ static int kvmppc_mmu_book3s_32_xlate_pte(struct kvm_vcpu *vcpu, gva_t eaddr,
|
||||||
case 2:
|
case 2:
|
||||||
case 6:
|
case 6:
|
||||||
pte->may_write = true;
|
pte->may_write = true;
|
||||||
|
/* fall through */
|
||||||
case 3:
|
case 3:
|
||||||
case 5:
|
case 5:
|
||||||
case 7:
|
case 7:
|
||||||
|
|
|
@ -50,6 +50,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *v)
|
||||||
return !!(v->arch.pending_exceptions) || kvm_request_pending(v);
|
return !!(v->arch.pending_exceptions) || kvm_request_pending(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
return kvm_arch_vcpu_runnable(vcpu);
|
||||||
|
}
|
||||||
|
|
||||||
bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
|
bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -452,16 +457,6 @@ err_out:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool kvm_arch_has_vcpu_debugfs(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvm_arch_destroy_vm(struct kvm *kvm)
|
void kvm_arch_destroy_vm(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
|
@ -21,7 +21,7 @@ static void kasan_populate_pte(pte_t *ptep, pgprot_t prot)
|
||||||
__set_pte_at(&init_mm, va, ptep, pfn_pte(PHYS_PFN(pa), prot), 0);
|
__set_pte_at(&init_mm, va, ptep, pfn_pte(PHYS_PFN(pa), prot), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end)
|
static int __ref kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end)
|
||||||
{
|
{
|
||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
unsigned long k_cur, k_next;
|
unsigned long k_cur, k_next;
|
||||||
|
@ -35,7 +35,10 @@ static int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_
|
||||||
if ((void *)pmd_page_vaddr(*pmd) != kasan_early_shadow_pte)
|
if ((void *)pmd_page_vaddr(*pmd) != kasan_early_shadow_pte)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
new = pte_alloc_one_kernel(&init_mm);
|
if (slab_is_available())
|
||||||
|
new = pte_alloc_one_kernel(&init_mm);
|
||||||
|
else
|
||||||
|
new = memblock_alloc(PTE_FRAG_SIZE, PTE_FRAG_SIZE);
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -275,12 +275,32 @@ static const struct attribute_group *papr_scm_dimm_groups[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline int papr_scm_node(int node)
|
||||||
|
{
|
||||||
|
int min_dist = INT_MAX, dist;
|
||||||
|
int nid, min_node;
|
||||||
|
|
||||||
|
if ((node == NUMA_NO_NODE) || node_online(node))
|
||||||
|
return node;
|
||||||
|
|
||||||
|
min_node = first_online_node;
|
||||||
|
for_each_online_node(nid) {
|
||||||
|
dist = node_distance(node, nid);
|
||||||
|
if (dist < min_dist) {
|
||||||
|
min_dist = dist;
|
||||||
|
min_node = nid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return min_node;
|
||||||
|
}
|
||||||
|
|
||||||
static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
|
static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
|
||||||
{
|
{
|
||||||
struct device *dev = &p->pdev->dev;
|
struct device *dev = &p->pdev->dev;
|
||||||
struct nd_mapping_desc mapping;
|
struct nd_mapping_desc mapping;
|
||||||
struct nd_region_desc ndr_desc;
|
struct nd_region_desc ndr_desc;
|
||||||
unsigned long dimm_flags;
|
unsigned long dimm_flags;
|
||||||
|
int target_nid, online_nid;
|
||||||
|
|
||||||
p->bus_desc.ndctl = papr_scm_ndctl;
|
p->bus_desc.ndctl = papr_scm_ndctl;
|
||||||
p->bus_desc.module = THIS_MODULE;
|
p->bus_desc.module = THIS_MODULE;
|
||||||
|
@ -319,8 +339,10 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
|
||||||
|
|
||||||
memset(&ndr_desc, 0, sizeof(ndr_desc));
|
memset(&ndr_desc, 0, sizeof(ndr_desc));
|
||||||
ndr_desc.attr_groups = region_attr_groups;
|
ndr_desc.attr_groups = region_attr_groups;
|
||||||
ndr_desc.numa_node = dev_to_node(&p->pdev->dev);
|
target_nid = dev_to_node(&p->pdev->dev);
|
||||||
ndr_desc.target_node = ndr_desc.numa_node;
|
online_nid = papr_scm_node(target_nid);
|
||||||
|
ndr_desc.numa_node = online_nid;
|
||||||
|
ndr_desc.target_node = target_nid;
|
||||||
ndr_desc.res = &p->res;
|
ndr_desc.res = &p->res;
|
||||||
ndr_desc.of_node = p->dn;
|
ndr_desc.of_node = p->dn;
|
||||||
ndr_desc.provider_data = p;
|
ndr_desc.provider_data = p;
|
||||||
|
@ -338,6 +360,9 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
|
||||||
ndr_desc.res, p->dn);
|
ndr_desc.res, p->dn);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
if (target_nid != online_nid)
|
||||||
|
dev_info(dev, "Region registered with target node %d and online node %d",
|
||||||
|
target_nid, online_nid);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
cpus {
|
cpus {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
timebase-frequency = <1000000>;
|
|
||||||
cpu0: cpu@0 {
|
cpu0: cpu@0 {
|
||||||
compatible = "sifive,e51", "sifive,rocket0", "riscv";
|
compatible = "sifive,e51", "sifive,rocket0", "riscv";
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
|
|
@ -34,6 +34,7 @@ CONFIG_PCIEPORTBUS=y
|
||||||
CONFIG_PCI_HOST_GENERIC=y
|
CONFIG_PCI_HOST_GENERIC=y
|
||||||
CONFIG_PCIE_XILINX=y
|
CONFIG_PCIE_XILINX=y
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_VIRTIO_BLK=y
|
CONFIG_VIRTIO_BLK=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
|
@ -53,6 +54,8 @@ CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_OF_PLATFORM=y
|
CONFIG_SERIAL_OF_PLATFORM=y
|
||||||
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
|
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
|
||||||
CONFIG_HVC_RISCV_SBI=y
|
CONFIG_HVC_RISCV_SBI=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_SPI_SIFIVE=y
|
||||||
# CONFIG_PTP_1588_CLOCK is not set
|
# CONFIG_PTP_1588_CLOCK is not set
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
CONFIG_DRM_RADEON=y
|
CONFIG_DRM_RADEON=y
|
||||||
|
@ -66,8 +69,9 @@ CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_UAS=y
|
CONFIG_USB_UAS=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_SPI=y
|
||||||
CONFIG_VIRTIO_MMIO=y
|
CONFIG_VIRTIO_MMIO=y
|
||||||
CONFIG_SPI_SIFIVE=y
|
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_AUTOFS4_FS=y
|
CONFIG_AUTOFS4_FS=y
|
||||||
|
@ -83,8 +87,4 @@ CONFIG_ROOT_NFS=y
|
||||||
CONFIG_CRYPTO_USER_API_HASH=y
|
CONFIG_CRYPTO_USER_API_HASH=y
|
||||||
CONFIG_CRYPTO_DEV_VIRTIO=y
|
CONFIG_CRYPTO_DEV_VIRTIO=y
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_MMC_SPI=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_DEVTMPFS_MOUNT=y
|
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
|
|
|
@ -37,7 +37,7 @@ $(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE
|
||||||
# these symbols in the kernel code rather than hand-coded addresses.
|
# these symbols in the kernel code rather than hand-coded addresses.
|
||||||
|
|
||||||
SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \
|
SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \
|
||||||
-Wl,--hash-style=both
|
-Wl,--build-id -Wl,--hash-style=both
|
||||||
$(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/rt_sigreturn.o FORCE
|
$(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/rt_sigreturn.o FORCE
|
||||||
$(call if_changed,vdsold)
|
$(call if_changed,vdsold)
|
||||||
|
|
||||||
|
|
|
@ -5,5 +5,3 @@ lib-y += memset.o
|
||||||
lib-y += uaccess.o
|
lib-y += uaccess.o
|
||||||
|
|
||||||
lib-$(CONFIG_64BIT) += tishift.o
|
lib-$(CONFIG_64BIT) += tishift.o
|
||||||
|
|
||||||
lib-$(CONFIG_32BIT) += udivdi3.o
|
|
||||||
|
|
|
@ -81,9 +81,13 @@ EXPORT_SYMBOL(__delay);
|
||||||
void udelay(unsigned long usecs)
|
void udelay(unsigned long usecs)
|
||||||
{
|
{
|
||||||
u64 ucycles = (u64)usecs * lpj_fine * UDELAY_MULT;
|
u64 ucycles = (u64)usecs * lpj_fine * UDELAY_MULT;
|
||||||
|
u64 n;
|
||||||
|
|
||||||
if (unlikely(usecs > MAX_UDELAY_US)) {
|
if (unlikely(usecs > MAX_UDELAY_US)) {
|
||||||
__delay((u64)usecs * riscv_timebase / 1000000ULL);
|
n = (u64)usecs * riscv_timebase;
|
||||||
|
do_div(n, 1000000);
|
||||||
|
|
||||||
|
__delay(n);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2016-2017 Free Software Foundation, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
|
||||||
|
|
||||||
ENTRY(__udivdi3)
|
|
||||||
mv a2, a1
|
|
||||||
mv a1, a0
|
|
||||||
li a0, -1
|
|
||||||
beqz a2, .L5
|
|
||||||
li a3, 1
|
|
||||||
bgeu a2, a1, .L2
|
|
||||||
.L1:
|
|
||||||
blez a2, .L2
|
|
||||||
slli a2, a2, 1
|
|
||||||
slli a3, a3, 1
|
|
||||||
bgtu a1, a2, .L1
|
|
||||||
.L2:
|
|
||||||
li a0, 0
|
|
||||||
.L3:
|
|
||||||
bltu a1, a2, .L4
|
|
||||||
sub a1, a1, a2
|
|
||||||
or a0, a0, a3
|
|
||||||
.L4:
|
|
||||||
srli a3, a3, 1
|
|
||||||
srli a2, a2, 1
|
|
||||||
bnez a3, .L3
|
|
||||||
.L5:
|
|
||||||
ret
|
|
||||||
ENDPROC(__udivdi3)
|
|
|
@ -8,6 +8,7 @@ void store_ipl_parmblock(void);
|
||||||
void setup_boot_command_line(void);
|
void setup_boot_command_line(void);
|
||||||
void parse_boot_command_line(void);
|
void parse_boot_command_line(void);
|
||||||
void setup_memory_end(void);
|
void setup_memory_end(void);
|
||||||
|
void verify_facilities(void);
|
||||||
void print_missing_facilities(void);
|
void print_missing_facilities(void);
|
||||||
unsigned long get_random_base(unsigned long safe_addr);
|
unsigned long get_random_base(unsigned long safe_addr);
|
||||||
|
|
||||||
|
|
|
@ -48,9 +48,7 @@ void store_ipl_parmblock(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
uv_set_shared(__pa(&ipl_block));
|
|
||||||
rc = __diag308(DIAG308_STORE, &ipl_block);
|
rc = __diag308(DIAG308_STORE, &ipl_block);
|
||||||
uv_remove_shared(__pa(&ipl_block));
|
|
||||||
if (rc == DIAG308_RC_OK &&
|
if (rc == DIAG308_RC_OK &&
|
||||||
ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
|
ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
|
||||||
ipl_block_valid = 1;
|
ipl_block_valid = 1;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <asm/timex.h>
|
#include <asm/timex.h>
|
||||||
#include <asm/sclp.h>
|
#include <asm/sclp.h>
|
||||||
#include "compressed/decompressor.h"
|
#include "compressed/decompressor.h"
|
||||||
|
#include "boot.h"
|
||||||
|
|
||||||
#define PRNG_MODE_TDES 1
|
#define PRNG_MODE_TDES 1
|
||||||
#define PRNG_MODE_SHA512 2
|
#define PRNG_MODE_SHA512 2
|
||||||
|
|
|
@ -3,6 +3,7 @@ CONFIG_POSIX_MQUEUE=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
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
CONFIG_BSD_PROCESS_ACCT=y
|
CONFIG_BSD_PROCESS_ACCT=y
|
||||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||||
CONFIG_TASKSTATS=y
|
CONFIG_TASKSTATS=y
|
||||||
|
@ -18,55 +19,71 @@ CONFIG_BLK_CGROUP=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
CONFIG_RT_GROUP_SCHED=y
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
|
CONFIG_CGROUP_RDMA=y
|
||||||
CONFIG_CGROUP_FREEZER=y
|
CONFIG_CGROUP_FREEZER=y
|
||||||
CONFIG_CGROUP_HUGETLB=y
|
CONFIG_CGROUP_HUGETLB=y
|
||||||
CONFIG_CPUSETS=y
|
CONFIG_CPUSETS=y
|
||||||
CONFIG_CGROUP_DEVICE=y
|
CONFIG_CGROUP_DEVICE=y
|
||||||
CONFIG_CGROUP_CPUACCT=y
|
CONFIG_CGROUP_CPUACCT=y
|
||||||
CONFIG_CGROUP_PERF=y
|
CONFIG_CGROUP_PERF=y
|
||||||
|
CONFIG_CGROUP_BPF=y
|
||||||
CONFIG_NAMESPACES=y
|
CONFIG_NAMESPACES=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
CONFIG_SCHED_AUTOGROUP=y
|
CONFIG_SCHED_AUTOGROUP=y
|
||||||
CONFIG_BLK_DEV_INITRD=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_CHECKPOINT_RESTORE=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
|
||||||
CONFIG_PROFILING=y
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_LIVEPATCH=y
|
||||||
|
CONFIG_TUNE_ZEC12=y
|
||||||
|
CONFIG_NR_CPUS=512
|
||||||
|
CONFIG_NUMA=y
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
CONFIG_KEXEC_FILE=y
|
||||||
|
CONFIG_EXPOLINE=y
|
||||||
|
CONFIG_EXPOLINE_AUTO=y
|
||||||
|
CONFIG_CHSC_SCH=y
|
||||||
|
CONFIG_VFIO_CCW=m
|
||||||
|
CONFIG_VFIO_AP=m
|
||||||
|
CONFIG_CRASH_DUMP=y
|
||||||
|
CONFIG_HIBERNATION=y
|
||||||
|
CONFIG_PM_DEBUG=y
|
||||||
|
CONFIG_CMM=m
|
||||||
|
CONFIG_APPLDATA_BASE=y
|
||||||
|
CONFIG_KVM=m
|
||||||
|
CONFIG_VHOST_NET=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
|
||||||
CONFIG_STATIC_KEYS_SELFTEST=y
|
CONFIG_STATIC_KEYS_SELFTEST=y
|
||||||
|
CONFIG_REFCOUNT_FULL=y
|
||||||
|
CONFIG_LOCK_EVENT_COUNTS=y
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_FORCE_LOAD=y
|
CONFIG_MODULE_FORCE_LOAD=y
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||||
|
CONFIG_MODULE_SIG=y
|
||||||
|
CONFIG_MODULE_SIG_SHA256=y
|
||||||
CONFIG_BLK_DEV_INTEGRITY=y
|
CONFIG_BLK_DEV_INTEGRITY=y
|
||||||
CONFIG_BLK_DEV_THROTTLING=y
|
CONFIG_BLK_DEV_THROTTLING=y
|
||||||
CONFIG_BLK_WBT=y
|
CONFIG_BLK_WBT=y
|
||||||
CONFIG_BLK_WBT_SQ=y
|
CONFIG_BLK_CGROUP_IOLATENCY=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
|
||||||
CONFIG_MINIX_SUBPARTITION=y
|
CONFIG_MINIX_SUBPARTITION=y
|
||||||
CONFIG_SOLARIS_X86_PARTITION=y
|
CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
CONFIG_CFQ_GROUP_IOSCHED=y
|
CONFIG_IOSCHED_BFQ=y
|
||||||
CONFIG_DEFAULT_DEADLINE=y
|
CONFIG_BFQ_GROUP_IOSCHED=y
|
||||||
CONFIG_LIVEPATCH=y
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_TUNE_ZEC12=y
|
|
||||||
CONFIG_NR_CPUS=512
|
|
||||||
CONFIG_NUMA=y
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_HZ_100=y
|
|
||||||
CONFIG_KEXEC_FILE=y
|
|
||||||
CONFIG_KEXEC_VERIFY_SIG=y
|
|
||||||
CONFIG_EXPOLINE=y
|
|
||||||
CONFIG_EXPOLINE_AUTO=y
|
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
|
@ -82,17 +99,8 @@ CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||||
CONFIG_IDLE_PAGE_TRACKING=y
|
CONFIG_IDLE_PAGE_TRACKING=y
|
||||||
CONFIG_PCI=y
|
CONFIG_PERCPU_STATS=y
|
||||||
CONFIG_PCI_DEBUG=y
|
CONFIG_GUP_BENCHMARK=y
|
||||||
CONFIG_HOTPLUG_PCI=y
|
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
|
||||||
CONFIG_CHSC_SCH=y
|
|
||||||
CONFIG_VFIO_AP=m
|
|
||||||
CONFIG_VFIO_CCW=m
|
|
||||||
CONFIG_CRASH_DUMP=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
|
||||||
CONFIG_HIBERNATION=y
|
|
||||||
CONFIG_PM_DEBUG=y
|
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_DIAG=m
|
CONFIG_PACKET_DIAG=m
|
||||||
|
@ -121,9 +129,6 @@ CONFIG_NET_IPVTI=m
|
||||||
CONFIG_INET_AH=m
|
CONFIG_INET_AH=m
|
||||||
CONFIG_INET_ESP=m
|
CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
|
||||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
|
||||||
CONFIG_INET_XFRM_MODE_BEET=m
|
|
||||||
CONFIG_INET_DIAG=m
|
CONFIG_INET_DIAG=m
|
||||||
CONFIG_INET_UDP_DIAG=m
|
CONFIG_INET_UDP_DIAG=m
|
||||||
CONFIG_TCP_CONG_ADVANCED=y
|
CONFIG_TCP_CONG_ADVANCED=y
|
||||||
|
@ -139,10 +144,6 @@ CONFIG_INET6_AH=m
|
||||||
CONFIG_INET6_ESP=m
|
CONFIG_INET6_ESP=m
|
||||||
CONFIG_INET6_IPCOMP=m
|
CONFIG_INET6_IPCOMP=m
|
||||||
CONFIG_IPV6_MIP6=m
|
CONFIG_IPV6_MIP6=m
|
||||||
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_TUNNEL=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_BEET=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
|
|
||||||
CONFIG_IPV6_VTI=m
|
CONFIG_IPV6_VTI=m
|
||||||
CONFIG_IPV6_SIT=m
|
CONFIG_IPV6_SIT=m
|
||||||
CONFIG_IPV6_GRE=m
|
CONFIG_IPV6_GRE=m
|
||||||
|
@ -264,11 +265,8 @@ CONFIG_IP_VS_SED=m
|
||||||
CONFIG_IP_VS_NQ=m
|
CONFIG_IP_VS_NQ=m
|
||||||
CONFIG_IP_VS_FTP=m
|
CONFIG_IP_VS_FTP=m
|
||||||
CONFIG_IP_VS_PE_SIP=m
|
CONFIG_IP_VS_PE_SIP=m
|
||||||
CONFIG_NF_CONNTRACK_IPV4=m
|
|
||||||
CONFIG_NF_TABLES_IPV4=y
|
CONFIG_NF_TABLES_IPV4=y
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
|
||||||
CONFIG_NF_TABLES_ARP=y
|
CONFIG_NF_TABLES_ARP=y
|
||||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
|
||||||
CONFIG_IP_NF_IPTABLES=m
|
CONFIG_IP_NF_IPTABLES=m
|
||||||
CONFIG_IP_NF_MATCH_AH=m
|
CONFIG_IP_NF_MATCH_AH=m
|
||||||
CONFIG_IP_NF_MATCH_ECN=m
|
CONFIG_IP_NF_MATCH_ECN=m
|
||||||
|
@ -287,10 +285,7 @@ CONFIG_IP_NF_SECURITY=m
|
||||||
CONFIG_IP_NF_ARPTABLES=m
|
CONFIG_IP_NF_ARPTABLES=m
|
||||||
CONFIG_IP_NF_ARPFILTER=m
|
CONFIG_IP_NF_ARPFILTER=m
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
CONFIG_NF_CONNTRACK_IPV6=m
|
|
||||||
CONFIG_NF_TABLES_IPV6=y
|
CONFIG_NF_TABLES_IPV6=y
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
|
||||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
|
||||||
CONFIG_IP6_NF_IPTABLES=m
|
CONFIG_IP6_NF_IPTABLES=m
|
||||||
CONFIG_IP6_NF_MATCH_AH=m
|
CONFIG_IP6_NF_MATCH_AH=m
|
||||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||||
|
@ -309,7 +304,7 @@ CONFIG_IP6_NF_RAW=m
|
||||||
CONFIG_IP6_NF_SECURITY=m
|
CONFIG_IP6_NF_SECURITY=m
|
||||||
CONFIG_IP6_NF_NAT=m
|
CONFIG_IP6_NF_NAT=m
|
||||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||||
CONFIG_NF_TABLES_BRIDGE=y
|
CONFIG_NF_TABLES_BRIDGE=m
|
||||||
CONFIG_RDS=m
|
CONFIG_RDS=m
|
||||||
CONFIG_RDS_RDMA=m
|
CONFIG_RDS_RDMA=m
|
||||||
CONFIG_RDS_TCP=m
|
CONFIG_RDS_TCP=m
|
||||||
|
@ -375,9 +370,11 @@ CONFIG_NETLINK_DIAG=m
|
||||||
CONFIG_CGROUP_NET_PRIO=y
|
CONFIG_CGROUP_NET_PRIO=y
|
||||||
CONFIG_BPF_JIT=y
|
CONFIG_BPF_JIT=y
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_PCI_DEBUG=y
|
||||||
|
CONFIG_HOTPLUG_PCI=y
|
||||||
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_DMA_CMA=y
|
|
||||||
CONFIG_CMA_SIZE_MBYTES=0
|
|
||||||
CONFIG_CONNECTOR=y
|
CONFIG_CONNECTOR=y
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_BLK_DEV_LOOP=m
|
CONFIG_BLK_DEV_LOOP=m
|
||||||
|
@ -395,7 +392,6 @@ CONFIG_RAID_ATTRS=m
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_CHR_DEV_ST=m
|
CONFIG_CHR_DEV_ST=m
|
||||||
CONFIG_CHR_DEV_OSST=m
|
|
||||||
CONFIG_BLK_DEV_SR=m
|
CONFIG_BLK_DEV_SR=m
|
||||||
CONFIG_CHR_DEV_SG=y
|
CONFIG_CHR_DEV_SG=y
|
||||||
CONFIG_CHR_DEV_SCH=m
|
CONFIG_CHR_DEV_SCH=m
|
||||||
|
@ -415,17 +411,19 @@ CONFIG_SCSI_DH_RDAC=m
|
||||||
CONFIG_SCSI_DH_HP_SW=m
|
CONFIG_SCSI_DH_HP_SW=m
|
||||||
CONFIG_SCSI_DH_EMC=m
|
CONFIG_SCSI_DH_EMC=m
|
||||||
CONFIG_SCSI_DH_ALUA=m
|
CONFIG_SCSI_DH_ALUA=m
|
||||||
CONFIG_SCSI_OSD_INITIATOR=m
|
|
||||||
CONFIG_SCSI_OSD_ULD=m
|
|
||||||
CONFIG_MD=y
|
CONFIG_MD=y
|
||||||
CONFIG_BLK_DEV_MD=y
|
CONFIG_BLK_DEV_MD=y
|
||||||
CONFIG_MD_LINEAR=m
|
CONFIG_MD_LINEAR=m
|
||||||
CONFIG_MD_MULTIPATH=m
|
CONFIG_MD_MULTIPATH=m
|
||||||
CONFIG_MD_FAULTY=m
|
CONFIG_MD_FAULTY=m
|
||||||
|
CONFIG_MD_CLUSTER=m
|
||||||
|
CONFIG_BCACHE=m
|
||||||
CONFIG_BLK_DEV_DM=m
|
CONFIG_BLK_DEV_DM=m
|
||||||
|
CONFIG_DM_UNSTRIPED=m
|
||||||
CONFIG_DM_CRYPT=m
|
CONFIG_DM_CRYPT=m
|
||||||
CONFIG_DM_SNAPSHOT=m
|
CONFIG_DM_SNAPSHOT=m
|
||||||
CONFIG_DM_THIN_PROVISIONING=m
|
CONFIG_DM_THIN_PROVISIONING=m
|
||||||
|
CONFIG_DM_WRITECACHE=m
|
||||||
CONFIG_DM_MIRROR=m
|
CONFIG_DM_MIRROR=m
|
||||||
CONFIG_DM_LOG_USERSPACE=m
|
CONFIG_DM_LOG_USERSPACE=m
|
||||||
CONFIG_DM_RAID=m
|
CONFIG_DM_RAID=m
|
||||||
|
@ -445,23 +443,78 @@ 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_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
CONFIG_VIRTIO_NET=m
|
CONFIG_VIRTIO_NET=m
|
||||||
CONFIG_NLMON=m
|
CONFIG_NLMON=m
|
||||||
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
|
# CONFIG_NET_VENDOR_ADAPTEC is not set
|
||||||
|
# CONFIG_NET_VENDOR_AGERE is not set
|
||||||
|
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
||||||
|
# CONFIG_NET_VENDOR_ALTEON is not set
|
||||||
|
# CONFIG_NET_VENDOR_AMAZON is not set
|
||||||
|
# CONFIG_NET_VENDOR_AMD is not set
|
||||||
|
# CONFIG_NET_VENDOR_AQUANTIA is not set
|
||||||
# CONFIG_NET_VENDOR_ARC is not set
|
# CONFIG_NET_VENDOR_ARC is not set
|
||||||
|
# CONFIG_NET_VENDOR_ATHEROS is not set
|
||||||
|
# CONFIG_NET_VENDOR_AURORA is not set
|
||||||
|
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||||
|
# CONFIG_NET_VENDOR_BROCADE is not set
|
||||||
|
# CONFIG_NET_VENDOR_CADENCE is not set
|
||||||
|
# CONFIG_NET_VENDOR_CAVIUM is not set
|
||||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||||
|
# CONFIG_NET_VENDOR_CISCO is not set
|
||||||
|
# CONFIG_NET_VENDOR_CORTINA is not set
|
||||||
|
# CONFIG_NET_VENDOR_DEC is not set
|
||||||
|
# CONFIG_NET_VENDOR_DLINK is not set
|
||||||
|
# CONFIG_NET_VENDOR_EMULEX is not set
|
||||||
|
# CONFIG_NET_VENDOR_EZCHIP is not set
|
||||||
|
# CONFIG_NET_VENDOR_GOOGLE is not set
|
||||||
|
# CONFIG_NET_VENDOR_HP is not set
|
||||||
|
# CONFIG_NET_VENDOR_HUAWEI is not set
|
||||||
# CONFIG_NET_VENDOR_INTEL is not set
|
# CONFIG_NET_VENDOR_INTEL is not set
|
||||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||||
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_MICROCHIP is not set
|
||||||
|
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
||||||
|
# CONFIG_NET_VENDOR_MYRI is not set
|
||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||||
|
# CONFIG_NET_VENDOR_NETERION is not set
|
||||||
|
# CONFIG_NET_VENDOR_NETRONOME is not set
|
||||||
|
# CONFIG_NET_VENDOR_NI is not set
|
||||||
|
# CONFIG_NET_VENDOR_NVIDIA is not set
|
||||||
|
# CONFIG_NET_VENDOR_OKI is not set
|
||||||
|
# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
|
||||||
|
# CONFIG_NET_VENDOR_QLOGIC is not set
|
||||||
|
# CONFIG_NET_VENDOR_QUALCOMM is not set
|
||||||
|
# CONFIG_NET_VENDOR_RDC is not set
|
||||||
|
# CONFIG_NET_VENDOR_REALTEK is not set
|
||||||
|
# CONFIG_NET_VENDOR_RENESAS is not set
|
||||||
|
# CONFIG_NET_VENDOR_ROCKER is not set
|
||||||
|
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||||
|
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||||
|
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
||||||
|
# CONFIG_NET_VENDOR_SILAN is not set
|
||||||
|
# CONFIG_NET_VENDOR_SIS is not set
|
||||||
|
# CONFIG_NET_VENDOR_SMSC is not set
|
||||||
|
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
||||||
|
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||||
|
# CONFIG_NET_VENDOR_SUN is not set
|
||||||
|
# CONFIG_NET_VENDOR_SYNOPSYS is not set
|
||||||
|
# CONFIG_NET_VENDOR_TEHUTI is not set
|
||||||
|
# CONFIG_NET_VENDOR_TI is not set
|
||||||
|
# CONFIG_NET_VENDOR_VIA is not set
|
||||||
|
# CONFIG_NET_VENDOR_WIZNET 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
|
||||||
|
CONFIG_PPP_FILTER=y
|
||||||
CONFIG_PPP_MPPE=m
|
CONFIG_PPP_MPPE=m
|
||||||
|
CONFIG_PPP_MULTILINK=y
|
||||||
CONFIG_PPPOE=m
|
CONFIG_PPPOE=m
|
||||||
CONFIG_PPTP=m
|
CONFIG_PPTP=m
|
||||||
CONFIG_PPPOL2TP=m
|
CONFIG_PPPOL2TP=m
|
||||||
|
@ -473,10 +526,13 @@ CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
# CONFIG_SERIO is not set
|
# CONFIG_SERIO is not set
|
||||||
CONFIG_LEGACY_PTY_COUNT=0
|
CONFIG_LEGACY_PTY_COUNT=0
|
||||||
|
CONFIG_NULL_TTY=m
|
||||||
CONFIG_HW_RANDOM_VIRTIO=m
|
CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
CONFIG_RAW_DRIVER=m
|
CONFIG_RAW_DRIVER=m
|
||||||
CONFIG_HANGCHECK_TIMER=m
|
CONFIG_HANGCHECK_TIMER=m
|
||||||
CONFIG_TN3270_FS=y
|
CONFIG_TN3270_FS=y
|
||||||
|
CONFIG_PPS=m
|
||||||
|
# CONFIG_PTP_1588_CLOCK is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
|
@ -498,8 +554,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_S390_AP_IOMMU=y
|
|
||||||
CONFIG_S390_CCW_IOMMU=y
|
CONFIG_S390_CCW_IOMMU=y
|
||||||
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
@ -519,6 +575,7 @@ CONFIG_OCFS2_FS=m
|
||||||
CONFIG_BTRFS_FS=y
|
CONFIG_BTRFS_FS=y
|
||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||||
CONFIG_BTRFS_DEBUG=y
|
CONFIG_BTRFS_DEBUG=y
|
||||||
|
CONFIG_BTRFS_ASSERT=y
|
||||||
CONFIG_NILFS2_FS=m
|
CONFIG_NILFS2_FS=m
|
||||||
CONFIG_FS_DAX=y
|
CONFIG_FS_DAX=y
|
||||||
CONFIG_EXPORTFS_BLOCK_OPS=y
|
CONFIG_EXPORTFS_BLOCK_OPS=y
|
||||||
|
@ -552,8 +609,10 @@ CONFIG_ECRYPT_FS=m
|
||||||
CONFIG_CRAMFS=m
|
CONFIG_CRAMFS=m
|
||||||
CONFIG_SQUASHFS=m
|
CONFIG_SQUASHFS=m
|
||||||
CONFIG_SQUASHFS_XATTR=y
|
CONFIG_SQUASHFS_XATTR=y
|
||||||
|
CONFIG_SQUASHFS_LZ4=y
|
||||||
CONFIG_SQUASHFS_LZO=y
|
CONFIG_SQUASHFS_LZO=y
|
||||||
CONFIG_SQUASHFS_XZ=y
|
CONFIG_SQUASHFS_XZ=y
|
||||||
|
CONFIG_SQUASHFS_ZSTD=y
|
||||||
CONFIG_ROMFS_FS=m
|
CONFIG_ROMFS_FS=m
|
||||||
CONFIG_NFS_FS=m
|
CONFIG_NFS_FS=m
|
||||||
CONFIG_NFS_V3_ACL=y
|
CONFIG_NFS_V3_ACL=y
|
||||||
|
@ -564,7 +623,6 @@ CONFIG_NFSD_V3_ACL=y
|
||||||
CONFIG_NFSD_V4=y
|
CONFIG_NFSD_V4=y
|
||||||
CONFIG_NFSD_V4_SECURITY_LABEL=y
|
CONFIG_NFSD_V4_SECURITY_LABEL=y
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
CONFIG_CIFS_STATS=y
|
|
||||||
CONFIG_CIFS_STATS2=y
|
CONFIG_CIFS_STATS2=y
|
||||||
CONFIG_CIFS_WEAK_PW_HASH=y
|
CONFIG_CIFS_WEAK_PW_HASH=y
|
||||||
CONFIG_CIFS_UPCALL=y
|
CONFIG_CIFS_UPCALL=y
|
||||||
|
@ -580,19 +638,112 @@ CONFIG_NLS_ISO8859_1=m
|
||||||
CONFIG_NLS_ISO8859_15=m
|
CONFIG_NLS_ISO8859_15=m
|
||||||
CONFIG_NLS_UTF8=m
|
CONFIG_NLS_UTF8=m
|
||||||
CONFIG_DLM=m
|
CONFIG_DLM=m
|
||||||
|
CONFIG_UNICODE=y
|
||||||
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
|
CONFIG_BIG_KEYS=y
|
||||||
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
|
CONFIG_SECURITY=y
|
||||||
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
CONFIG_FORTIFY_SOURCE=y
|
||||||
|
CONFIG_SECURITY_SELINUX=y
|
||||||
|
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
||||||
|
CONFIG_SECURITY_SELINUX_DISABLE=y
|
||||||
|
CONFIG_INTEGRITY_SIGNATURE=y
|
||||||
|
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
||||||
|
CONFIG_IMA=y
|
||||||
|
CONFIG_IMA_DEFAULT_HASH_SHA256=y
|
||||||
|
CONFIG_IMA_WRITE_POLICY=y
|
||||||
|
CONFIG_IMA_APPRAISE=y
|
||||||
|
CONFIG_CRYPTO_USER=m
|
||||||
|
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||||
|
CONFIG_CRYPTO_PCRYPT=m
|
||||||
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
|
CONFIG_CRYPTO_TEST=m
|
||||||
|
CONFIG_CRYPTO_DH=m
|
||||||
|
CONFIG_CRYPTO_ECDH=m
|
||||||
|
CONFIG_CRYPTO_ECRDSA=m
|
||||||
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
|
CONFIG_CRYPTO_AEGIS128=m
|
||||||
|
CONFIG_CRYPTO_AEGIS128L=m
|
||||||
|
CONFIG_CRYPTO_AEGIS256=m
|
||||||
|
CONFIG_CRYPTO_MORUS640=m
|
||||||
|
CONFIG_CRYPTO_MORUS1280=m
|
||||||
|
CONFIG_CRYPTO_CFB=m
|
||||||
|
CONFIG_CRYPTO_LRW=m
|
||||||
|
CONFIG_CRYPTO_PCBC=m
|
||||||
|
CONFIG_CRYPTO_KEYWRAP=m
|
||||||
|
CONFIG_CRYPTO_ADIANTUM=m
|
||||||
|
CONFIG_CRYPTO_XCBC=m
|
||||||
|
CONFIG_CRYPTO_VMAC=m
|
||||||
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
CONFIG_CRYPTO_XXHASH=m
|
||||||
|
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||||
|
CONFIG_CRYPTO_RMD128=m
|
||||||
|
CONFIG_CRYPTO_RMD160=m
|
||||||
|
CONFIG_CRYPTO_RMD256=m
|
||||||
|
CONFIG_CRYPTO_RMD320=m
|
||||||
|
CONFIG_CRYPTO_SHA3=m
|
||||||
|
CONFIG_CRYPTO_SM3=m
|
||||||
|
CONFIG_CRYPTO_TGR192=m
|
||||||
|
CONFIG_CRYPTO_WP512=m
|
||||||
|
CONFIG_CRYPTO_AES_TI=m
|
||||||
|
CONFIG_CRYPTO_ANUBIS=m
|
||||||
|
CONFIG_CRYPTO_ARC4=m
|
||||||
|
CONFIG_CRYPTO_BLOWFISH=m
|
||||||
|
CONFIG_CRYPTO_CAMELLIA=m
|
||||||
|
CONFIG_CRYPTO_CAST5=m
|
||||||
|
CONFIG_CRYPTO_CAST6=m
|
||||||
|
CONFIG_CRYPTO_FCRYPT=m
|
||||||
|
CONFIG_CRYPTO_KHAZAD=m
|
||||||
|
CONFIG_CRYPTO_SALSA20=m
|
||||||
|
CONFIG_CRYPTO_SEED=m
|
||||||
|
CONFIG_CRYPTO_SERPENT=m
|
||||||
|
CONFIG_CRYPTO_SM4=m
|
||||||
|
CONFIG_CRYPTO_TEA=m
|
||||||
|
CONFIG_CRYPTO_TWOFISH=m
|
||||||
|
CONFIG_CRYPTO_842=m
|
||||||
|
CONFIG_CRYPTO_LZ4=m
|
||||||
|
CONFIG_CRYPTO_LZ4HC=m
|
||||||
|
CONFIG_CRYPTO_ZSTD=m
|
||||||
|
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
|
CONFIG_CRYPTO_STATS=y
|
||||||
|
CONFIG_ZCRYPT=m
|
||||||
|
CONFIG_PKEY=m
|
||||||
|
CONFIG_CRYPTO_PAES_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA256_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA512_S390=m
|
||||||
|
CONFIG_CRYPTO_DES_S390=m
|
||||||
|
CONFIG_CRYPTO_AES_S390=m
|
||||||
|
CONFIG_CRYPTO_GHASH_S390=m
|
||||||
|
CONFIG_CRYPTO_CRC32_S390=y
|
||||||
|
CONFIG_CORDIC=m
|
||||||
|
CONFIG_CRC32_SELFTEST=y
|
||||||
|
CONFIG_CRC4=m
|
||||||
|
CONFIG_CRC7=m
|
||||||
|
CONFIG_CRC8=m
|
||||||
|
CONFIG_RANDOM32_SELFTEST=y
|
||||||
|
CONFIG_DMA_CMA=y
|
||||||
|
CONFIG_CMA_SIZE_MBYTES=0
|
||||||
|
CONFIG_DMA_API_DEBUG=y
|
||||||
|
CONFIG_STRING_SELFTEST=y
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_DYNAMIC_DEBUG=y
|
CONFIG_DYNAMIC_DEBUG=y
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
CONFIG_DEBUG_INFO_DWARF4=y
|
CONFIG_DEBUG_INFO_DWARF4=y
|
||||||
CONFIG_GDB_SCRIPTS=y
|
CONFIG_GDB_SCRIPTS=y
|
||||||
CONFIG_FRAME_WARN=1024
|
CONFIG_FRAME_WARN=1024
|
||||||
CONFIG_READABLE_ASM=y
|
|
||||||
CONFIG_UNUSED_SYMBOLS=y
|
CONFIG_UNUSED_SYMBOLS=y
|
||||||
CONFIG_HEADERS_INSTALL=y
|
CONFIG_HEADERS_INSTALL=y
|
||||||
CONFIG_HEADERS_CHECK=y
|
CONFIG_HEADERS_CHECK=y
|
||||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_PAGEALLOC=y
|
CONFIG_DEBUG_PAGEALLOC=y
|
||||||
|
CONFIG_PAGE_OWNER=y
|
||||||
CONFIG_DEBUG_RODATA_TEST=y
|
CONFIG_DEBUG_RODATA_TEST=y
|
||||||
CONFIG_DEBUG_OBJECTS=y
|
CONFIG_DEBUG_OBJECTS=y
|
||||||
CONFIG_DEBUG_OBJECTS_SELFTEST=y
|
CONFIG_DEBUG_OBJECTS_SELFTEST=y
|
||||||
|
@ -645,7 +796,6 @@ CONFIG_STACK_TRACER=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
CONFIG_HIST_TRIGGERS=y
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_DMA_API_DEBUG=y
|
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_TEST_LIST_SORT=y
|
CONFIG_TEST_LIST_SORT=y
|
||||||
CONFIG_TEST_SORT=y
|
CONFIG_TEST_SORT=y
|
||||||
|
@ -657,85 +807,3 @@ CONFIG_ATOMIC64_SELFTEST=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_PERSISTENT_KEYRINGS=y
|
|
||||||
CONFIG_BIG_KEYS=y
|
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
|
||||||
CONFIG_SECURITY=y
|
|
||||||
CONFIG_SECURITY_NETWORK=y
|
|
||||||
CONFIG_FORTIFY_SOURCE=y
|
|
||||||
CONFIG_SECURITY_SELINUX=y
|
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
|
||||||
CONFIG_SECURITY_SELINUX_DISABLE=y
|
|
||||||
CONFIG_INTEGRITY_SIGNATURE=y
|
|
||||||
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
|
||||||
CONFIG_IMA=y
|
|
||||||
CONFIG_IMA_DEFAULT_HASH_SHA256=y
|
|
||||||
CONFIG_IMA_WRITE_POLICY=y
|
|
||||||
CONFIG_IMA_APPRAISE=y
|
|
||||||
CONFIG_CRYPTO_DH=m
|
|
||||||
CONFIG_CRYPTO_ECDH=m
|
|
||||||
CONFIG_CRYPTO_USER=m
|
|
||||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
|
||||||
CONFIG_CRYPTO_PCRYPT=m
|
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
|
||||||
CONFIG_CRYPTO_TEST=m
|
|
||||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
|
||||||
CONFIG_CRYPTO_LRW=m
|
|
||||||
CONFIG_CRYPTO_PCBC=m
|
|
||||||
CONFIG_CRYPTO_KEYWRAP=m
|
|
||||||
CONFIG_CRYPTO_XCBC=m
|
|
||||||
CONFIG_CRYPTO_VMAC=m
|
|
||||||
CONFIG_CRYPTO_CRC32=m
|
|
||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
|
||||||
CONFIG_CRYPTO_RMD128=m
|
|
||||||
CONFIG_CRYPTO_RMD160=m
|
|
||||||
CONFIG_CRYPTO_RMD256=m
|
|
||||||
CONFIG_CRYPTO_RMD320=m
|
|
||||||
CONFIG_CRYPTO_SHA512=m
|
|
||||||
CONFIG_CRYPTO_SHA3=m
|
|
||||||
CONFIG_CRYPTO_TGR192=m
|
|
||||||
CONFIG_CRYPTO_WP512=m
|
|
||||||
CONFIG_CRYPTO_AES_TI=m
|
|
||||||
CONFIG_CRYPTO_ANUBIS=m
|
|
||||||
CONFIG_CRYPTO_BLOWFISH=m
|
|
||||||
CONFIG_CRYPTO_CAMELLIA=m
|
|
||||||
CONFIG_CRYPTO_CAST5=m
|
|
||||||
CONFIG_CRYPTO_CAST6=m
|
|
||||||
CONFIG_CRYPTO_FCRYPT=m
|
|
||||||
CONFIG_CRYPTO_KHAZAD=m
|
|
||||||
CONFIG_CRYPTO_SALSA20=m
|
|
||||||
CONFIG_CRYPTO_SEED=m
|
|
||||||
CONFIG_CRYPTO_SERPENT=m
|
|
||||||
CONFIG_CRYPTO_TEA=m
|
|
||||||
CONFIG_CRYPTO_TWOFISH=m
|
|
||||||
CONFIG_CRYPTO_842=m
|
|
||||||
CONFIG_CRYPTO_LZ4=m
|
|
||||||
CONFIG_CRYPTO_LZ4HC=m
|
|
||||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
|
||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
|
||||||
CONFIG_CRYPTO_USER_API_AEAD=m
|
|
||||||
CONFIG_ZCRYPT=m
|
|
||||||
CONFIG_PKEY=m
|
|
||||||
CONFIG_CRYPTO_PAES_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA256_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA512_S390=m
|
|
||||||
CONFIG_CRYPTO_DES_S390=m
|
|
||||||
CONFIG_CRYPTO_AES_S390=m
|
|
||||||
CONFIG_CRYPTO_GHASH_S390=m
|
|
||||||
CONFIG_CRYPTO_CRC32_S390=y
|
|
||||||
CONFIG_PKCS7_MESSAGE_PARSER=y
|
|
||||||
CONFIG_SYSTEM_TRUSTED_KEYRING=y
|
|
||||||
CONFIG_CRC7=m
|
|
||||||
CONFIG_CRC8=m
|
|
||||||
CONFIG_RANDOM32_SELFTEST=y
|
|
||||||
CONFIG_CORDIC=m
|
|
||||||
CONFIG_CMM=m
|
|
||||||
CONFIG_APPLDATA_BASE=y
|
|
||||||
CONFIG_KVM=m
|
|
||||||
CONFIG_KVM_S390_UCONTROL=y
|
|
||||||
CONFIG_VHOST_NET=m
|
|
||||||
CONFIG_VHOST_VSOCK=m
|
|
||||||
|
|
|
@ -12,30 +12,51 @@ CONFIG_TASK_IO_ACCOUNTING=y
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_NUMA_BALANCING=y
|
CONFIG_NUMA_BALANCING=y
|
||||||
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
|
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_MEMCG_SWAP=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
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
|
CONFIG_CGROUP_RDMA=y
|
||||||
CONFIG_CGROUP_FREEZER=y
|
CONFIG_CGROUP_FREEZER=y
|
||||||
CONFIG_CGROUP_HUGETLB=y
|
CONFIG_CGROUP_HUGETLB=y
|
||||||
CONFIG_CPUSETS=y
|
CONFIG_CPUSETS=y
|
||||||
CONFIG_CGROUP_DEVICE=y
|
CONFIG_CGROUP_DEVICE=y
|
||||||
CONFIG_CGROUP_CPUACCT=y
|
CONFIG_CGROUP_CPUACCT=y
|
||||||
CONFIG_CGROUP_PERF=y
|
CONFIG_CGROUP_PERF=y
|
||||||
|
CONFIG_CGROUP_BPF=y
|
||||||
CONFIG_NAMESPACES=y
|
CONFIG_NAMESPACES=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
CONFIG_SCHED_AUTOGROUP=y
|
CONFIG_SCHED_AUTOGROUP=y
|
||||||
CONFIG_BLK_DEV_INITRD=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_CHECKPOINT_RESTORE=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
|
||||||
CONFIG_PROFILING=y
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_LIVEPATCH=y
|
||||||
|
CONFIG_TUNE_ZEC12=y
|
||||||
|
CONFIG_NR_CPUS=512
|
||||||
|
CONFIG_NUMA=y
|
||||||
|
# CONFIG_NUMA_EMU is not set
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
CONFIG_KEXEC_FILE=y
|
||||||
|
CONFIG_EXPOLINE=y
|
||||||
|
CONFIG_EXPOLINE_AUTO=y
|
||||||
|
CONFIG_CHSC_SCH=y
|
||||||
|
CONFIG_VFIO_CCW=m
|
||||||
|
CONFIG_VFIO_AP=m
|
||||||
|
CONFIG_CRASH_DUMP=y
|
||||||
|
CONFIG_HIBERNATION=y
|
||||||
|
CONFIG_PM_DEBUG=y
|
||||||
|
CONFIG_CMM=m
|
||||||
|
CONFIG_APPLDATA_BASE=y
|
||||||
|
CONFIG_KVM=m
|
||||||
|
CONFIG_VHOST_NET=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
|
||||||
|
@ -47,27 +68,18 @@ CONFIG_MODVERSIONS=y
|
||||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||||
CONFIG_MODULE_SIG=y
|
CONFIG_MODULE_SIG=y
|
||||||
CONFIG_MODULE_SIG_SHA256=y
|
CONFIG_MODULE_SIG_SHA256=y
|
||||||
CONFIG_BLK_DEV_INTEGRITY=y
|
|
||||||
CONFIG_BLK_DEV_THROTTLING=y
|
CONFIG_BLK_DEV_THROTTLING=y
|
||||||
CONFIG_BLK_WBT=y
|
CONFIG_BLK_WBT=y
|
||||||
CONFIG_BLK_WBT_SQ=y
|
CONFIG_BLK_CGROUP_IOLATENCY=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
|
||||||
CONFIG_MINIX_SUBPARTITION=y
|
CONFIG_MINIX_SUBPARTITION=y
|
||||||
CONFIG_SOLARIS_X86_PARTITION=y
|
CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
CONFIG_CFQ_GROUP_IOSCHED=y
|
CONFIG_IOSCHED_BFQ=y
|
||||||
CONFIG_DEFAULT_DEADLINE=y
|
CONFIG_BFQ_GROUP_IOSCHED=y
|
||||||
CONFIG_LIVEPATCH=y
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_TUNE_ZEC12=y
|
|
||||||
CONFIG_NR_CPUS=512
|
|
||||||
CONFIG_NUMA=y
|
|
||||||
CONFIG_HZ_100=y
|
|
||||||
CONFIG_KEXEC_FILE=y
|
|
||||||
CONFIG_KEXEC_VERIFY_SIG=y
|
|
||||||
CONFIG_EXPOLINE=y
|
|
||||||
CONFIG_EXPOLINE_AUTO=y
|
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
|
@ -81,16 +93,8 @@ CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||||
CONFIG_IDLE_PAGE_TRACKING=y
|
CONFIG_IDLE_PAGE_TRACKING=y
|
||||||
CONFIG_PCI=y
|
CONFIG_PERCPU_STATS=y
|
||||||
CONFIG_HOTPLUG_PCI=y
|
CONFIG_GUP_BENCHMARK=y
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
|
||||||
CONFIG_CHSC_SCH=y
|
|
||||||
CONFIG_VFIO_AP=m
|
|
||||||
CONFIG_VFIO_CCW=m
|
|
||||||
CONFIG_CRASH_DUMP=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
|
||||||
CONFIG_HIBERNATION=y
|
|
||||||
CONFIG_PM_DEBUG=y
|
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_DIAG=m
|
CONFIG_PACKET_DIAG=m
|
||||||
|
@ -119,9 +123,6 @@ CONFIG_NET_IPVTI=m
|
||||||
CONFIG_INET_AH=m
|
CONFIG_INET_AH=m
|
||||||
CONFIG_INET_ESP=m
|
CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
|
||||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
|
||||||
CONFIG_INET_XFRM_MODE_BEET=m
|
|
||||||
CONFIG_INET_DIAG=m
|
CONFIG_INET_DIAG=m
|
||||||
CONFIG_INET_UDP_DIAG=m
|
CONFIG_INET_UDP_DIAG=m
|
||||||
CONFIG_TCP_CONG_ADVANCED=y
|
CONFIG_TCP_CONG_ADVANCED=y
|
||||||
|
@ -137,10 +138,6 @@ CONFIG_INET6_AH=m
|
||||||
CONFIG_INET6_ESP=m
|
CONFIG_INET6_ESP=m
|
||||||
CONFIG_INET6_IPCOMP=m
|
CONFIG_INET6_IPCOMP=m
|
||||||
CONFIG_IPV6_MIP6=m
|
CONFIG_IPV6_MIP6=m
|
||||||
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_TUNNEL=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_BEET=m
|
|
||||||
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
|
|
||||||
CONFIG_IPV6_VTI=m
|
CONFIG_IPV6_VTI=m
|
||||||
CONFIG_IPV6_SIT=m
|
CONFIG_IPV6_SIT=m
|
||||||
CONFIG_IPV6_GRE=m
|
CONFIG_IPV6_GRE=m
|
||||||
|
@ -262,11 +259,8 @@ CONFIG_IP_VS_SED=m
|
||||||
CONFIG_IP_VS_NQ=m
|
CONFIG_IP_VS_NQ=m
|
||||||
CONFIG_IP_VS_FTP=m
|
CONFIG_IP_VS_FTP=m
|
||||||
CONFIG_IP_VS_PE_SIP=m
|
CONFIG_IP_VS_PE_SIP=m
|
||||||
CONFIG_NF_CONNTRACK_IPV4=m
|
|
||||||
CONFIG_NF_TABLES_IPV4=y
|
CONFIG_NF_TABLES_IPV4=y
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
|
||||||
CONFIG_NF_TABLES_ARP=y
|
CONFIG_NF_TABLES_ARP=y
|
||||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
|
||||||
CONFIG_IP_NF_IPTABLES=m
|
CONFIG_IP_NF_IPTABLES=m
|
||||||
CONFIG_IP_NF_MATCH_AH=m
|
CONFIG_IP_NF_MATCH_AH=m
|
||||||
CONFIG_IP_NF_MATCH_ECN=m
|
CONFIG_IP_NF_MATCH_ECN=m
|
||||||
|
@ -285,10 +279,7 @@ CONFIG_IP_NF_SECURITY=m
|
||||||
CONFIG_IP_NF_ARPTABLES=m
|
CONFIG_IP_NF_ARPTABLES=m
|
||||||
CONFIG_IP_NF_ARPFILTER=m
|
CONFIG_IP_NF_ARPFILTER=m
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
CONFIG_NF_CONNTRACK_IPV6=m
|
|
||||||
CONFIG_NF_TABLES_IPV6=y
|
CONFIG_NF_TABLES_IPV6=y
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
|
||||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
|
||||||
CONFIG_IP6_NF_IPTABLES=m
|
CONFIG_IP6_NF_IPTABLES=m
|
||||||
CONFIG_IP6_NF_MATCH_AH=m
|
CONFIG_IP6_NF_MATCH_AH=m
|
||||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||||
|
@ -307,7 +298,7 @@ CONFIG_IP6_NF_RAW=m
|
||||||
CONFIG_IP6_NF_SECURITY=m
|
CONFIG_IP6_NF_SECURITY=m
|
||||||
CONFIG_IP6_NF_NAT=m
|
CONFIG_IP6_NF_NAT=m
|
||||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||||
CONFIG_NF_TABLES_BRIDGE=y
|
CONFIG_NF_TABLES_BRIDGE=m
|
||||||
CONFIG_RDS=m
|
CONFIG_RDS=m
|
||||||
CONFIG_RDS_RDMA=m
|
CONFIG_RDS_RDMA=m
|
||||||
CONFIG_RDS_TCP=m
|
CONFIG_RDS_TCP=m
|
||||||
|
@ -372,9 +363,11 @@ CONFIG_NETLINK_DIAG=m
|
||||||
CONFIG_CGROUP_NET_PRIO=y
|
CONFIG_CGROUP_NET_PRIO=y
|
||||||
CONFIG_BPF_JIT=y
|
CONFIG_BPF_JIT=y
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_HOTPLUG_PCI=y
|
||||||
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
|
CONFIG_UEVENT_HELPER=y
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_DMA_CMA=y
|
|
||||||
CONFIG_CMA_SIZE_MBYTES=0
|
|
||||||
CONFIG_CONNECTOR=y
|
CONFIG_CONNECTOR=y
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_BLK_DEV_LOOP=m
|
CONFIG_BLK_DEV_LOOP=m
|
||||||
|
@ -383,6 +376,7 @@ CONFIG_BLK_DEV_DRBD=m
|
||||||
CONFIG_BLK_DEV_NBD=m
|
CONFIG_BLK_DEV_NBD=m
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=32768
|
CONFIG_BLK_DEV_RAM_SIZE=32768
|
||||||
|
# CONFIG_BLK_DEV_XPRAM is not set
|
||||||
CONFIG_VIRTIO_BLK=y
|
CONFIG_VIRTIO_BLK=y
|
||||||
CONFIG_BLK_DEV_RBD=m
|
CONFIG_BLK_DEV_RBD=m
|
||||||
CONFIG_BLK_DEV_NVME=m
|
CONFIG_BLK_DEV_NVME=m
|
||||||
|
@ -392,7 +386,6 @@ CONFIG_RAID_ATTRS=m
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_CHR_DEV_ST=m
|
CONFIG_CHR_DEV_ST=m
|
||||||
CONFIG_CHR_DEV_OSST=m
|
|
||||||
CONFIG_BLK_DEV_SR=m
|
CONFIG_BLK_DEV_SR=m
|
||||||
CONFIG_CHR_DEV_SG=y
|
CONFIG_CHR_DEV_SG=y
|
||||||
CONFIG_CHR_DEV_SCH=m
|
CONFIG_CHR_DEV_SCH=m
|
||||||
|
@ -412,17 +405,19 @@ CONFIG_SCSI_DH_RDAC=m
|
||||||
CONFIG_SCSI_DH_HP_SW=m
|
CONFIG_SCSI_DH_HP_SW=m
|
||||||
CONFIG_SCSI_DH_EMC=m
|
CONFIG_SCSI_DH_EMC=m
|
||||||
CONFIG_SCSI_DH_ALUA=m
|
CONFIG_SCSI_DH_ALUA=m
|
||||||
CONFIG_SCSI_OSD_INITIATOR=m
|
|
||||||
CONFIG_SCSI_OSD_ULD=m
|
|
||||||
CONFIG_MD=y
|
CONFIG_MD=y
|
||||||
CONFIG_BLK_DEV_MD=y
|
CONFIG_BLK_DEV_MD=y
|
||||||
CONFIG_MD_LINEAR=m
|
CONFIG_MD_LINEAR=m
|
||||||
CONFIG_MD_MULTIPATH=m
|
CONFIG_MD_MULTIPATH=m
|
||||||
CONFIG_MD_FAULTY=m
|
CONFIG_MD_FAULTY=m
|
||||||
|
CONFIG_MD_CLUSTER=m
|
||||||
|
CONFIG_BCACHE=m
|
||||||
CONFIG_BLK_DEV_DM=m
|
CONFIG_BLK_DEV_DM=m
|
||||||
|
CONFIG_DM_UNSTRIPED=m
|
||||||
CONFIG_DM_CRYPT=m
|
CONFIG_DM_CRYPT=m
|
||||||
CONFIG_DM_SNAPSHOT=m
|
CONFIG_DM_SNAPSHOT=m
|
||||||
CONFIG_DM_THIN_PROVISIONING=m
|
CONFIG_DM_THIN_PROVISIONING=m
|
||||||
|
CONFIG_DM_WRITECACHE=m
|
||||||
CONFIG_DM_MIRROR=m
|
CONFIG_DM_MIRROR=m
|
||||||
CONFIG_DM_LOG_USERSPACE=m
|
CONFIG_DM_LOG_USERSPACE=m
|
||||||
CONFIG_DM_RAID=m
|
CONFIG_DM_RAID=m
|
||||||
|
@ -435,6 +430,7 @@ CONFIG_DM_UEVENT=y
|
||||||
CONFIG_DM_FLAKEY=m
|
CONFIG_DM_FLAKEY=m
|
||||||
CONFIG_DM_VERITY=m
|
CONFIG_DM_VERITY=m
|
||||||
CONFIG_DM_SWITCH=m
|
CONFIG_DM_SWITCH=m
|
||||||
|
CONFIG_DM_INTEGRITY=m
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_BONDING=m
|
CONFIG_BONDING=m
|
||||||
CONFIG_DUMMY=m
|
CONFIG_DUMMY=m
|
||||||
|
@ -442,23 +438,78 @@ 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_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
CONFIG_VIRTIO_NET=m
|
CONFIG_VIRTIO_NET=m
|
||||||
CONFIG_NLMON=m
|
CONFIG_NLMON=m
|
||||||
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
|
# CONFIG_NET_VENDOR_ADAPTEC is not set
|
||||||
|
# CONFIG_NET_VENDOR_AGERE is not set
|
||||||
|
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
||||||
|
# CONFIG_NET_VENDOR_ALTEON is not set
|
||||||
|
# CONFIG_NET_VENDOR_AMAZON is not set
|
||||||
|
# CONFIG_NET_VENDOR_AMD is not set
|
||||||
|
# CONFIG_NET_VENDOR_AQUANTIA is not set
|
||||||
# CONFIG_NET_VENDOR_ARC is not set
|
# CONFIG_NET_VENDOR_ARC is not set
|
||||||
|
# CONFIG_NET_VENDOR_ATHEROS is not set
|
||||||
|
# CONFIG_NET_VENDOR_AURORA is not set
|
||||||
|
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||||
|
# CONFIG_NET_VENDOR_BROCADE is not set
|
||||||
|
# CONFIG_NET_VENDOR_CADENCE is not set
|
||||||
|
# CONFIG_NET_VENDOR_CAVIUM is not set
|
||||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||||
|
# CONFIG_NET_VENDOR_CISCO is not set
|
||||||
|
# CONFIG_NET_VENDOR_CORTINA is not set
|
||||||
|
# CONFIG_NET_VENDOR_DEC is not set
|
||||||
|
# CONFIG_NET_VENDOR_DLINK is not set
|
||||||
|
# CONFIG_NET_VENDOR_EMULEX is not set
|
||||||
|
# CONFIG_NET_VENDOR_EZCHIP is not set
|
||||||
|
# CONFIG_NET_VENDOR_GOOGLE is not set
|
||||||
|
# CONFIG_NET_VENDOR_HP is not set
|
||||||
|
# CONFIG_NET_VENDOR_HUAWEI is not set
|
||||||
# CONFIG_NET_VENDOR_INTEL is not set
|
# CONFIG_NET_VENDOR_INTEL is not set
|
||||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||||
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_MICROCHIP is not set
|
||||||
|
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
||||||
|
# CONFIG_NET_VENDOR_MYRI is not set
|
||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||||
|
# CONFIG_NET_VENDOR_NETERION is not set
|
||||||
|
# CONFIG_NET_VENDOR_NETRONOME is not set
|
||||||
|
# CONFIG_NET_VENDOR_NI is not set
|
||||||
|
# CONFIG_NET_VENDOR_NVIDIA is not set
|
||||||
|
# CONFIG_NET_VENDOR_OKI is not set
|
||||||
|
# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
|
||||||
|
# CONFIG_NET_VENDOR_QLOGIC is not set
|
||||||
|
# CONFIG_NET_VENDOR_QUALCOMM is not set
|
||||||
|
# CONFIG_NET_VENDOR_RDC is not set
|
||||||
|
# CONFIG_NET_VENDOR_REALTEK is not set
|
||||||
|
# CONFIG_NET_VENDOR_RENESAS is not set
|
||||||
|
# CONFIG_NET_VENDOR_ROCKER is not set
|
||||||
|
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||||
|
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||||
|
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
||||||
|
# CONFIG_NET_VENDOR_SILAN is not set
|
||||||
|
# CONFIG_NET_VENDOR_SIS is not set
|
||||||
|
# CONFIG_NET_VENDOR_SMSC is not set
|
||||||
|
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
||||||
|
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||||
|
# CONFIG_NET_VENDOR_SUN is not set
|
||||||
|
# CONFIG_NET_VENDOR_SYNOPSYS is not set
|
||||||
|
# CONFIG_NET_VENDOR_TEHUTI is not set
|
||||||
|
# CONFIG_NET_VENDOR_TI is not set
|
||||||
|
# CONFIG_NET_VENDOR_VIA is not set
|
||||||
|
# CONFIG_NET_VENDOR_WIZNET 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
|
||||||
|
CONFIG_PPP_FILTER=y
|
||||||
CONFIG_PPP_MPPE=m
|
CONFIG_PPP_MPPE=m
|
||||||
|
CONFIG_PPP_MULTILINK=y
|
||||||
CONFIG_PPPOE=m
|
CONFIG_PPPOE=m
|
||||||
CONFIG_PPTP=m
|
CONFIG_PPTP=m
|
||||||
CONFIG_PPPOL2TP=m
|
CONFIG_PPPOL2TP=m
|
||||||
|
@ -470,17 +521,21 @@ CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
# CONFIG_SERIO is not set
|
# CONFIG_SERIO is not set
|
||||||
CONFIG_LEGACY_PTY_COUNT=0
|
CONFIG_LEGACY_PTY_COUNT=0
|
||||||
|
CONFIG_NULL_TTY=m
|
||||||
CONFIG_HW_RANDOM_VIRTIO=m
|
CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
CONFIG_RAW_DRIVER=m
|
CONFIG_RAW_DRIVER=m
|
||||||
CONFIG_HANGCHECK_TIMER=m
|
CONFIG_HANGCHECK_TIMER=m
|
||||||
CONFIG_TN3270_FS=y
|
CONFIG_TN3270_FS=y
|
||||||
|
# CONFIG_PTP_1588_CLOCK is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
|
CONFIG_WATCHDOG_CORE=y
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
CONFIG_SOFT_WATCHDOG=m
|
CONFIG_SOFT_WATCHDOG=m
|
||||||
CONFIG_DIAG288_WATCHDOG=m
|
CONFIG_DIAG288_WATCHDOG=m
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
CONFIG_DRM_VIRTIO_GPU=y
|
CONFIG_DRM_VIRTIO_GPU=y
|
||||||
|
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
# CONFIG_HID is not set
|
# CONFIG_HID is not set
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
|
@ -495,8 +550,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_S390_AP_IOMMU=y
|
|
||||||
CONFIG_S390_CCW_IOMMU=y
|
CONFIG_S390_CCW_IOMMU=y
|
||||||
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
@ -546,8 +601,10 @@ CONFIG_ECRYPT_FS=m
|
||||||
CONFIG_CRAMFS=m
|
CONFIG_CRAMFS=m
|
||||||
CONFIG_SQUASHFS=m
|
CONFIG_SQUASHFS=m
|
||||||
CONFIG_SQUASHFS_XATTR=y
|
CONFIG_SQUASHFS_XATTR=y
|
||||||
|
CONFIG_SQUASHFS_LZ4=y
|
||||||
CONFIG_SQUASHFS_LZO=y
|
CONFIG_SQUASHFS_LZO=y
|
||||||
CONFIG_SQUASHFS_XZ=y
|
CONFIG_SQUASHFS_XZ=y
|
||||||
|
CONFIG_SQUASHFS_ZSTD=y
|
||||||
CONFIG_ROMFS_FS=m
|
CONFIG_ROMFS_FS=m
|
||||||
CONFIG_NFS_FS=m
|
CONFIG_NFS_FS=m
|
||||||
CONFIG_NFS_V3_ACL=y
|
CONFIG_NFS_V3_ACL=y
|
||||||
|
@ -558,7 +615,6 @@ CONFIG_NFSD_V3_ACL=y
|
||||||
CONFIG_NFSD_V4=y
|
CONFIG_NFSD_V4=y
|
||||||
CONFIG_NFSD_V4_SECURITY_LABEL=y
|
CONFIG_NFSD_V4_SECURITY_LABEL=y
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
CONFIG_CIFS_STATS=y
|
|
||||||
CONFIG_CIFS_STATS2=y
|
CONFIG_CIFS_STATS2=y
|
||||||
CONFIG_CIFS_WEAK_PW_HASH=y
|
CONFIG_CIFS_WEAK_PW_HASH=y
|
||||||
CONFIG_CIFS_UPCALL=y
|
CONFIG_CIFS_UPCALL=y
|
||||||
|
@ -574,13 +630,103 @@ CONFIG_NLS_ISO8859_1=m
|
||||||
CONFIG_NLS_ISO8859_15=m
|
CONFIG_NLS_ISO8859_15=m
|
||||||
CONFIG_NLS_UTF8=m
|
CONFIG_NLS_UTF8=m
|
||||||
CONFIG_DLM=m
|
CONFIG_DLM=m
|
||||||
|
CONFIG_UNICODE=y
|
||||||
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
|
CONFIG_BIG_KEYS=y
|
||||||
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
|
CONFIG_SECURITY=y
|
||||||
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
CONFIG_SECURITY_SELINUX=y
|
||||||
|
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
||||||
|
CONFIG_SECURITY_SELINUX_DISABLE=y
|
||||||
|
CONFIG_INTEGRITY_SIGNATURE=y
|
||||||
|
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
||||||
|
CONFIG_IMA=y
|
||||||
|
CONFIG_IMA_DEFAULT_HASH_SHA256=y
|
||||||
|
CONFIG_IMA_WRITE_POLICY=y
|
||||||
|
CONFIG_IMA_APPRAISE=y
|
||||||
|
CONFIG_CRYPTO_FIPS=y
|
||||||
|
CONFIG_CRYPTO_USER=m
|
||||||
|
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||||
|
CONFIG_CRYPTO_PCRYPT=m
|
||||||
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
|
CONFIG_CRYPTO_TEST=m
|
||||||
|
CONFIG_CRYPTO_DH=m
|
||||||
|
CONFIG_CRYPTO_ECDH=m
|
||||||
|
CONFIG_CRYPTO_ECRDSA=m
|
||||||
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
|
CONFIG_CRYPTO_AEGIS128=m
|
||||||
|
CONFIG_CRYPTO_AEGIS128L=m
|
||||||
|
CONFIG_CRYPTO_AEGIS256=m
|
||||||
|
CONFIG_CRYPTO_MORUS640=m
|
||||||
|
CONFIG_CRYPTO_MORUS1280=m
|
||||||
|
CONFIG_CRYPTO_CFB=m
|
||||||
|
CONFIG_CRYPTO_LRW=m
|
||||||
|
CONFIG_CRYPTO_OFB=m
|
||||||
|
CONFIG_CRYPTO_PCBC=m
|
||||||
|
CONFIG_CRYPTO_KEYWRAP=m
|
||||||
|
CONFIG_CRYPTO_ADIANTUM=m
|
||||||
|
CONFIG_CRYPTO_XCBC=m
|
||||||
|
CONFIG_CRYPTO_VMAC=m
|
||||||
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
CONFIG_CRYPTO_XXHASH=m
|
||||||
|
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||||
|
CONFIG_CRYPTO_RMD128=m
|
||||||
|
CONFIG_CRYPTO_RMD160=m
|
||||||
|
CONFIG_CRYPTO_RMD256=m
|
||||||
|
CONFIG_CRYPTO_RMD320=m
|
||||||
|
CONFIG_CRYPTO_SHA3=m
|
||||||
|
CONFIG_CRYPTO_SM3=m
|
||||||
|
CONFIG_CRYPTO_TGR192=m
|
||||||
|
CONFIG_CRYPTO_WP512=m
|
||||||
|
CONFIG_CRYPTO_AES_TI=m
|
||||||
|
CONFIG_CRYPTO_ANUBIS=m
|
||||||
|
CONFIG_CRYPTO_ARC4=m
|
||||||
|
CONFIG_CRYPTO_BLOWFISH=m
|
||||||
|
CONFIG_CRYPTO_CAMELLIA=m
|
||||||
|
CONFIG_CRYPTO_CAST5=m
|
||||||
|
CONFIG_CRYPTO_CAST6=m
|
||||||
|
CONFIG_CRYPTO_FCRYPT=m
|
||||||
|
CONFIG_CRYPTO_KHAZAD=m
|
||||||
|
CONFIG_CRYPTO_SALSA20=m
|
||||||
|
CONFIG_CRYPTO_SEED=m
|
||||||
|
CONFIG_CRYPTO_SERPENT=m
|
||||||
|
CONFIG_CRYPTO_SM4=m
|
||||||
|
CONFIG_CRYPTO_TEA=m
|
||||||
|
CONFIG_CRYPTO_TWOFISH=m
|
||||||
|
CONFIG_CRYPTO_842=m
|
||||||
|
CONFIG_CRYPTO_LZ4=m
|
||||||
|
CONFIG_CRYPTO_LZ4HC=m
|
||||||
|
CONFIG_CRYPTO_ZSTD=m
|
||||||
|
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
|
CONFIG_CRYPTO_STATS=y
|
||||||
|
CONFIG_ZCRYPT=m
|
||||||
|
CONFIG_PKEY=m
|
||||||
|
CONFIG_CRYPTO_PAES_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA256_S390=m
|
||||||
|
CONFIG_CRYPTO_SHA512_S390=m
|
||||||
|
CONFIG_CRYPTO_DES_S390=m
|
||||||
|
CONFIG_CRYPTO_AES_S390=m
|
||||||
|
CONFIG_CRYPTO_GHASH_S390=m
|
||||||
|
CONFIG_CRYPTO_CRC32_S390=y
|
||||||
|
CONFIG_CORDIC=m
|
||||||
|
CONFIG_CRC4=m
|
||||||
|
CONFIG_CRC7=m
|
||||||
|
CONFIG_CRC8=m
|
||||||
|
CONFIG_DMA_CMA=y
|
||||||
|
CONFIG_CMA_SIZE_MBYTES=0
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
CONFIG_DEBUG_INFO_DWARF4=y
|
CONFIG_DEBUG_INFO_DWARF4=y
|
||||||
CONFIG_GDB_SCRIPTS=y
|
CONFIG_GDB_SCRIPTS=y
|
||||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
|
||||||
CONFIG_FRAME_WARN=1024
|
CONFIG_FRAME_WARN=1024
|
||||||
CONFIG_UNUSED_SYMBOLS=y
|
CONFIG_UNUSED_SYMBOLS=y
|
||||||
|
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
|
||||||
|
@ -599,82 +745,3 @@ CONFIG_ATOMIC64_SELFTEST=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_PERSISTENT_KEYRINGS=y
|
|
||||||
CONFIG_BIG_KEYS=y
|
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
|
||||||
CONFIG_SECURITY=y
|
|
||||||
CONFIG_SECURITY_NETWORK=y
|
|
||||||
CONFIG_SECURITY_SELINUX=y
|
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
|
||||||
CONFIG_SECURITY_SELINUX_DISABLE=y
|
|
||||||
CONFIG_INTEGRITY_SIGNATURE=y
|
|
||||||
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
|
||||||
CONFIG_IMA=y
|
|
||||||
CONFIG_IMA_DEFAULT_HASH_SHA256=y
|
|
||||||
CONFIG_IMA_WRITE_POLICY=y
|
|
||||||
CONFIG_IMA_APPRAISE=y
|
|
||||||
CONFIG_CRYPTO_FIPS=y
|
|
||||||
CONFIG_CRYPTO_DH=m
|
|
||||||
CONFIG_CRYPTO_ECDH=m
|
|
||||||
CONFIG_CRYPTO_USER=m
|
|
||||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
|
||||||
CONFIG_CRYPTO_PCRYPT=m
|
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
|
||||||
CONFIG_CRYPTO_TEST=m
|
|
||||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
|
||||||
CONFIG_CRYPTO_LRW=m
|
|
||||||
CONFIG_CRYPTO_PCBC=m
|
|
||||||
CONFIG_CRYPTO_KEYWRAP=m
|
|
||||||
CONFIG_CRYPTO_XCBC=m
|
|
||||||
CONFIG_CRYPTO_VMAC=m
|
|
||||||
CONFIG_CRYPTO_CRC32=m
|
|
||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
|
||||||
CONFIG_CRYPTO_RMD128=m
|
|
||||||
CONFIG_CRYPTO_RMD160=m
|
|
||||||
CONFIG_CRYPTO_RMD256=m
|
|
||||||
CONFIG_CRYPTO_RMD320=m
|
|
||||||
CONFIG_CRYPTO_SHA512=m
|
|
||||||
CONFIG_CRYPTO_SHA3=m
|
|
||||||
CONFIG_CRYPTO_TGR192=m
|
|
||||||
CONFIG_CRYPTO_WP512=m
|
|
||||||
CONFIG_CRYPTO_AES_TI=m
|
|
||||||
CONFIG_CRYPTO_ANUBIS=m
|
|
||||||
CONFIG_CRYPTO_BLOWFISH=m
|
|
||||||
CONFIG_CRYPTO_CAMELLIA=m
|
|
||||||
CONFIG_CRYPTO_CAST5=m
|
|
||||||
CONFIG_CRYPTO_CAST6=m
|
|
||||||
CONFIG_CRYPTO_FCRYPT=m
|
|
||||||
CONFIG_CRYPTO_KHAZAD=m
|
|
||||||
CONFIG_CRYPTO_SALSA20=m
|
|
||||||
CONFIG_CRYPTO_SEED=m
|
|
||||||
CONFIG_CRYPTO_SERPENT=m
|
|
||||||
CONFIG_CRYPTO_TEA=m
|
|
||||||
CONFIG_CRYPTO_TWOFISH=m
|
|
||||||
CONFIG_CRYPTO_842=m
|
|
||||||
CONFIG_CRYPTO_LZ4=m
|
|
||||||
CONFIG_CRYPTO_LZ4HC=m
|
|
||||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
|
||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
|
||||||
CONFIG_CRYPTO_USER_API_AEAD=m
|
|
||||||
CONFIG_ZCRYPT=m
|
|
||||||
CONFIG_PKEY=m
|
|
||||||
CONFIG_CRYPTO_PAES_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA256_S390=m
|
|
||||||
CONFIG_CRYPTO_SHA512_S390=m
|
|
||||||
CONFIG_CRYPTO_DES_S390=m
|
|
||||||
CONFIG_CRYPTO_AES_S390=m
|
|
||||||
CONFIG_CRYPTO_GHASH_S390=m
|
|
||||||
CONFIG_CRYPTO_CRC32_S390=y
|
|
||||||
CONFIG_CRC7=m
|
|
||||||
CONFIG_CRC8=m
|
|
||||||
CONFIG_CORDIC=m
|
|
||||||
CONFIG_CMM=m
|
|
||||||
CONFIG_APPLDATA_BASE=y
|
|
||||||
CONFIG_KVM=m
|
|
||||||
CONFIG_KVM_S390_UCONTROL=y
|
|
||||||
CONFIG_VHOST_NET=m
|
|
||||||
CONFIG_VHOST_VSOCK=m
|
|
||||||
|
|
|
@ -1,27 +1,33 @@
|
||||||
# CONFIG_SWAP is not set
|
# CONFIG_SWAP is not set
|
||||||
CONFIG_NO_HZ_IDLE=y
|
CONFIG_NO_HZ_IDLE=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
# CONFIG_CPU_ISOLATION is not set
|
||||||
|
# CONFIG_UTS_NS is not set
|
||||||
|
# CONFIG_PID_NS is not set
|
||||||
|
# CONFIG_NET_NS is not set
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_IBM_PARTITION=y
|
|
||||||
CONFIG_DEFAULT_DEADLINE=y
|
|
||||||
CONFIG_TUNE_ZEC12=y
|
CONFIG_TUNE_ZEC12=y
|
||||||
# CONFIG_COMPAT is not set
|
# CONFIG_COMPAT is not set
|
||||||
CONFIG_NR_CPUS=2
|
CONFIG_NR_CPUS=2
|
||||||
# CONFIG_HOTPLUG_CPU is not set
|
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
# CONFIG_ARCH_RANDOM is not set
|
# CONFIG_ARCH_RANDOM is not set
|
||||||
# CONFIG_COMPACTION is not set
|
# CONFIG_RELOCATABLE is not set
|
||||||
# CONFIG_MIGRATION is not set
|
|
||||||
# CONFIG_BOUNCE is not set
|
|
||||||
# CONFIG_CHECK_STACK is not set
|
|
||||||
# CONFIG_CHSC_SCH is not set
|
# CONFIG_CHSC_SCH is not set
|
||||||
# CONFIG_SCM_BUS is not set
|
# CONFIG_SCM_BUS is not set
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
|
||||||
# CONFIG_SECCOMP is not set
|
# CONFIG_SECCOMP is not set
|
||||||
|
# CONFIG_PFAULT is not set
|
||||||
|
# CONFIG_S390_HYPFS_FS is not set
|
||||||
|
# CONFIG_VIRTUALIZATION is not set
|
||||||
|
# CONFIG_S390_GUEST is not set
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
CONFIG_IBM_PARTITION=y
|
||||||
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
|
# CONFIG_COMPACTION is not set
|
||||||
|
# CONFIG_MIGRATION 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_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
|
@ -43,7 +49,6 @@ CONFIG_ZFCP=y
|
||||||
# CONFIG_HVC_IUCV is not set
|
# CONFIG_HVC_IUCV is not set
|
||||||
# CONFIG_HW_RANDOM_S390 is not set
|
# CONFIG_HW_RANDOM_S390 is not set
|
||||||
CONFIG_RAW_DRIVER=y
|
CONFIG_RAW_DRIVER=y
|
||||||
# CONFIG_SCLP_ASYNC is not set
|
|
||||||
# CONFIG_HMC_DRV is not set
|
# CONFIG_HMC_DRV is not set
|
||||||
# CONFIG_S390_TAPE is not set
|
# CONFIG_S390_TAPE is not set
|
||||||
# CONFIG_VMCP is not set
|
# CONFIG_VMCP is not set
|
||||||
|
@ -56,6 +61,7 @@ CONFIG_RAW_DRIVER=y
|
||||||
CONFIG_CONFIGFS_FS=y
|
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_DIMLIB is not set
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
|
@ -64,7 +70,4 @@ CONFIG_PANIC_ON_OOPS=y
|
||||||
# CONFIG_SCHED_DEBUG is not set
|
# CONFIG_SCHED_DEBUG is not set
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
# CONFIG_FTRACE is not set
|
# CONFIG_FTRACE is not set
|
||||||
# CONFIG_PFAULT is not set
|
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||||
# CONFIG_S390_HYPFS_FS is not set
|
|
||||||
# CONFIG_VIRTUALIZATION is not set
|
|
||||||
# CONFIG_S390_GUEST is not set
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
* @sliba: storage list information block address
|
* @sliba: storage list information block address
|
||||||
* @sla: storage list address
|
* @sla: storage list address
|
||||||
* @slsba: storage list state block address
|
* @slsba: storage list state block address
|
||||||
* @akey: access key for DLIB
|
* @akey: access key for SLIB
|
||||||
* @bkey: access key for SL
|
* @bkey: access key for SL
|
||||||
* @ckey: access key for SBALs
|
* @ckey: access key for SBALs
|
||||||
* @dkey: access key for SLSB
|
* @dkey: access key for SLSB
|
||||||
|
@ -50,11 +50,10 @@ struct qdesfmt0 {
|
||||||
/**
|
/**
|
||||||
* struct qdr - queue description record (QDR)
|
* struct qdr - queue description record (QDR)
|
||||||
* @qfmt: queue format
|
* @qfmt: queue format
|
||||||
* @pfmt: implementation dependent parameter format
|
|
||||||
* @ac: adapter characteristics
|
* @ac: adapter characteristics
|
||||||
* @iqdcnt: input queue descriptor count
|
* @iqdcnt: input queue descriptor count
|
||||||
* @oqdcnt: output queue descriptor count
|
* @oqdcnt: output queue descriptor count
|
||||||
* @iqdsz: inpout queue descriptor size
|
* @iqdsz: input queue descriptor size
|
||||||
* @oqdsz: output queue descriptor size
|
* @oqdsz: output queue descriptor size
|
||||||
* @qiba: queue information block address
|
* @qiba: queue information block address
|
||||||
* @qkey: queue information block key
|
* @qkey: queue information block key
|
||||||
|
@ -62,8 +61,7 @@ struct qdesfmt0 {
|
||||||
*/
|
*/
|
||||||
struct qdr {
|
struct qdr {
|
||||||
u32 qfmt : 8;
|
u32 qfmt : 8;
|
||||||
u32 pfmt : 8;
|
u32 : 16;
|
||||||
u32 : 8;
|
|
||||||
u32 ac : 8;
|
u32 ac : 8;
|
||||||
u32 : 8;
|
u32 : 8;
|
||||||
u32 iqdcnt : 8;
|
u32 iqdcnt : 8;
|
||||||
|
@ -327,6 +325,7 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int,
|
||||||
* struct qdio_initialize - qdio initialization data
|
* struct qdio_initialize - qdio initialization data
|
||||||
* @cdev: associated ccw device
|
* @cdev: associated ccw device
|
||||||
* @q_format: queue format
|
* @q_format: queue format
|
||||||
|
* @qdr_ac: feature flags to set
|
||||||
* @adapter_name: name for the adapter
|
* @adapter_name: name for the adapter
|
||||||
* @qib_param_field_format: format for qib_parm_field
|
* @qib_param_field_format: format for qib_parm_field
|
||||||
* @qib_param_field: pointer to 128 bytes or NULL, if no param field
|
* @qib_param_field: pointer to 128 bytes or NULL, if no param field
|
||||||
|
@ -338,6 +337,7 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int,
|
||||||
* @input_handler: handler to be called for input queues
|
* @input_handler: handler to be called for input queues
|
||||||
* @output_handler: handler to be called for output queues
|
* @output_handler: handler to be called for output queues
|
||||||
* @queue_start_poll_array: polling handlers (one per input queue or NULL)
|
* @queue_start_poll_array: polling handlers (one per input queue or NULL)
|
||||||
|
* @scan_threshold: # of in-use buffers that triggers scan on output queue
|
||||||
* @int_parm: interruption parameter
|
* @int_parm: interruption parameter
|
||||||
* @input_sbal_addr_array: address of no_input_qs * 128 pointers
|
* @input_sbal_addr_array: address of no_input_qs * 128 pointers
|
||||||
* @output_sbal_addr_array: address of no_output_qs * 128 pointers
|
* @output_sbal_addr_array: address of no_output_qs * 128 pointers
|
||||||
|
|
|
@ -84,6 +84,7 @@ extern int noexec_disabled;
|
||||||
extern int memory_end_set;
|
extern int memory_end_set;
|
||||||
extern unsigned long memory_end;
|
extern unsigned long memory_end;
|
||||||
extern unsigned long max_physmem_end;
|
extern unsigned long max_physmem_end;
|
||||||
|
extern unsigned long __swsusp_reset_dma;
|
||||||
|
|
||||||
#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
|
#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
|
||||||
#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
|
#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
|
||||||
|
|
|
@ -114,12 +114,8 @@ recursion_check:
|
||||||
* If it comes up a second time then there's something wrong going on:
|
* If it comes up a second time then there's something wrong going on:
|
||||||
* just break out and report an unknown stack type.
|
* just break out and report an unknown stack type.
|
||||||
*/
|
*/
|
||||||
if (*visit_mask & (1UL << info->type)) {
|
if (*visit_mask & (1UL << info->type))
|
||||||
printk_deferred_once(KERN_WARNING
|
|
||||||
"WARNING: stack recursion on stack type %d\n",
|
|
||||||
info->type);
|
|
||||||
goto unknown;
|
goto unknown;
|
||||||
}
|
|
||||||
*visit_mask |= 1UL << info->type;
|
*visit_mask |= 1UL << info->type;
|
||||||
return 0;
|
return 0;
|
||||||
unknown:
|
unknown:
|
||||||
|
|
|
@ -60,12 +60,5 @@ ENTRY(startup_continue)
|
||||||
|
|
||||||
.align 16
|
.align 16
|
||||||
.LPG1:
|
.LPG1:
|
||||||
.Lpcmsk:.quad 0x0000000180000000
|
|
||||||
.L4malign:.quad 0xffffffffffc00000
|
|
||||||
.Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8
|
|
||||||
.Lnop: .long 0x07000700
|
|
||||||
.Lparmaddr:
|
|
||||||
.quad PARMAREA
|
|
||||||
.align 64
|
|
||||||
.Ldw: .quad 0x0002000180000000,0x0000000000000000
|
.Ldw: .quad 0x0002000180000000,0x0000000000000000
|
||||||
.Laregs:.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
.Laregs:.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include <asm/os_info.h>
|
#include <asm/os_info.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/boot_data.h>
|
#include <asm/boot_data.h>
|
||||||
#include <asm/uv.h>
|
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
|
||||||
#define IPL_PARM_BLOCK_VERSION 0
|
#define IPL_PARM_BLOCK_VERSION 0
|
||||||
|
@ -892,21 +891,15 @@ static void __reipl_run(void *unused)
|
||||||
{
|
{
|
||||||
switch (reipl_type) {
|
switch (reipl_type) {
|
||||||
case IPL_TYPE_CCW:
|
case IPL_TYPE_CCW:
|
||||||
uv_set_shared(__pa(reipl_block_ccw));
|
|
||||||
diag308(DIAG308_SET, reipl_block_ccw);
|
diag308(DIAG308_SET, reipl_block_ccw);
|
||||||
uv_remove_shared(__pa(reipl_block_ccw));
|
|
||||||
diag308(DIAG308_LOAD_CLEAR, NULL);
|
diag308(DIAG308_LOAD_CLEAR, NULL);
|
||||||
break;
|
break;
|
||||||
case IPL_TYPE_FCP:
|
case IPL_TYPE_FCP:
|
||||||
uv_set_shared(__pa(reipl_block_fcp));
|
|
||||||
diag308(DIAG308_SET, reipl_block_fcp);
|
diag308(DIAG308_SET, reipl_block_fcp);
|
||||||
uv_remove_shared(__pa(reipl_block_fcp));
|
|
||||||
diag308(DIAG308_LOAD_CLEAR, NULL);
|
diag308(DIAG308_LOAD_CLEAR, NULL);
|
||||||
break;
|
break;
|
||||||
case IPL_TYPE_NSS:
|
case IPL_TYPE_NSS:
|
||||||
uv_set_shared(__pa(reipl_block_nss));
|
|
||||||
diag308(DIAG308_SET, reipl_block_nss);
|
diag308(DIAG308_SET, reipl_block_nss);
|
||||||
uv_remove_shared(__pa(reipl_block_nss));
|
|
||||||
diag308(DIAG308_LOAD_CLEAR, NULL);
|
diag308(DIAG308_LOAD_CLEAR, NULL);
|
||||||
break;
|
break;
|
||||||
case IPL_TYPE_UNKNOWN:
|
case IPL_TYPE_UNKNOWN:
|
||||||
|
@ -1176,9 +1169,7 @@ static struct kset *dump_kset;
|
||||||
|
|
||||||
static void diag308_dump(void *dump_block)
|
static void diag308_dump(void *dump_block)
|
||||||
{
|
{
|
||||||
uv_set_shared(__pa(dump_block));
|
|
||||||
diag308(DIAG308_SET, dump_block);
|
diag308(DIAG308_SET, dump_block);
|
||||||
uv_remove_shared(__pa(dump_block));
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (diag308(DIAG308_LOAD_NORMAL_DUMP, NULL) != 0x302)
|
if (diag308(DIAG308_LOAD_NORMAL_DUMP, NULL) != 0x302)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
|
#include <asm/kexec.h>
|
||||||
|
|
||||||
int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val,
|
int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val,
|
||||||
unsigned long addr)
|
unsigned long addr)
|
||||||
|
|
|
@ -34,7 +34,7 @@ struct cf_diag_csd { /* Counter set data per CPU */
|
||||||
unsigned char start[PAGE_SIZE]; /* Counter set at event start */
|
unsigned char start[PAGE_SIZE]; /* Counter set at event start */
|
||||||
unsigned char data[PAGE_SIZE]; /* Counter set at event delete */
|
unsigned char data[PAGE_SIZE]; /* Counter set at event delete */
|
||||||
};
|
};
|
||||||
DEFINE_PER_CPU(struct cf_diag_csd, cf_diag_csd);
|
static DEFINE_PER_CPU(struct cf_diag_csd, cf_diag_csd);
|
||||||
|
|
||||||
/* Counter sets are stored as data stream in a page sized memory buffer and
|
/* Counter sets are stored as data stream in a page sized memory buffer and
|
||||||
* exported to user space via raw data attached to the event sample data.
|
* exported to user space via raw data attached to the event sample data.
|
||||||
|
|
|
@ -1114,8 +1114,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
|
||||||
ROOT_DEV = Root_RAM0;
|
ROOT_DEV = Root_RAM0;
|
||||||
|
|
||||||
/* Is init_mm really needed? */
|
init_mm.start_code = (unsigned long) _text;
|
||||||
init_mm.start_code = PAGE_OFFSET;
|
|
||||||
init_mm.end_code = (unsigned long) _etext;
|
init_mm.end_code = (unsigned long) _etext;
|
||||||
init_mm.end_data = (unsigned long) _edata;
|
init_mm.end_data = (unsigned long) _edata;
|
||||||
init_mm.brk = (unsigned long) _end;
|
init_mm.brk = (unsigned long) _end;
|
||||||
|
|
|
@ -216,11 +216,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||||
|
|
||||||
if (!vdso_enabled)
|
if (!vdso_enabled)
|
||||||
return 0;
|
return 0;
|
||||||
/*
|
|
||||||
* Only map the vdso for dynamically linked elf binaries.
|
|
||||||
*/
|
|
||||||
if (!uses_interp)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
vdso_pages = vdso64_pages;
|
vdso_pages = vdso64_pages;
|
||||||
#ifdef CONFIG_COMPAT_VDSO
|
#ifdef CONFIG_COMPAT_VDSO
|
||||||
|
|
|
@ -32,10 +32,9 @@ PHDRS {
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = 0x100000;
|
. = 0x100000;
|
||||||
_stext = .; /* Start of text section */
|
|
||||||
.text : {
|
.text : {
|
||||||
/* Text and read-only data */
|
_stext = .; /* Start of text section */
|
||||||
_text = .;
|
_text = .; /* Text and read-only data */
|
||||||
HEAD_TEXT
|
HEAD_TEXT
|
||||||
TEXT_TEXT
|
TEXT_TEXT
|
||||||
SCHED_TEXT
|
SCHED_TEXT
|
||||||
|
@ -47,11 +46,10 @@ SECTIONS
|
||||||
*(.text.*_indirect_*)
|
*(.text.*_indirect_*)
|
||||||
*(.fixup)
|
*(.fixup)
|
||||||
*(.gnu.warning)
|
*(.gnu.warning)
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
_etext = .; /* End of text section */
|
||||||
} :text = 0x0700
|
} :text = 0x0700
|
||||||
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
_etext = .; /* End of text section */
|
|
||||||
|
|
||||||
NOTES :text :note
|
NOTES :text :note
|
||||||
|
|
||||||
.dummy : { *(.dummy) } :data
|
.dummy : { *(.dummy) } :data
|
||||||
|
|
|
@ -2516,16 +2516,6 @@ out_err:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool kvm_arch_has_vcpu_debugfs(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
|
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
VCPU_EVENT(vcpu, 3, "%s", "free cpu");
|
VCPU_EVENT(vcpu, 3, "%s", "free cpu");
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/raid/xor.h>
|
#include <linux/raid/xor.h>
|
||||||
|
#include <asm/xor.h>
|
||||||
|
|
||||||
static void xor_xc_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
|
static void xor_xc_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -161,9 +161,9 @@ static void walk_pmd_level(struct seq_file *m, struct pg_state *st,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < PTRS_PER_PMD && addr < max_addr; i++) {
|
pmd = pmd_offset(pud, addr);
|
||||||
|
for (i = 0; i < PTRS_PER_PMD && addr < max_addr; i++, pmd++) {
|
||||||
st->current_address = addr;
|
st->current_address = addr;
|
||||||
pmd = pmd_offset(pud, addr);
|
|
||||||
if (!pmd_none(*pmd)) {
|
if (!pmd_none(*pmd)) {
|
||||||
if (pmd_large(*pmd)) {
|
if (pmd_large(*pmd)) {
|
||||||
prot = pmd_val(*pmd) &
|
prot = pmd_val(*pmd) &
|
||||||
|
@ -192,9 +192,9 @@ static void walk_pud_level(struct seq_file *m, struct pg_state *st,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < PTRS_PER_PUD && addr < max_addr; i++) {
|
pud = pud_offset(p4d, addr);
|
||||||
|
for (i = 0; i < PTRS_PER_PUD && addr < max_addr; i++, pud++) {
|
||||||
st->current_address = addr;
|
st->current_address = addr;
|
||||||
pud = pud_offset(p4d, addr);
|
|
||||||
if (!pud_none(*pud))
|
if (!pud_none(*pud))
|
||||||
if (pud_large(*pud)) {
|
if (pud_large(*pud)) {
|
||||||
prot = pud_val(*pud) &
|
prot = pud_val(*pud) &
|
||||||
|
@ -222,9 +222,9 @@ static void walk_p4d_level(struct seq_file *m, struct pg_state *st,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < PTRS_PER_P4D && addr < max_addr; i++) {
|
p4d = p4d_offset(pgd, addr);
|
||||||
|
for (i = 0; i < PTRS_PER_P4D && addr < max_addr; i++, p4d++) {
|
||||||
st->current_address = addr;
|
st->current_address = addr;
|
||||||
p4d = p4d_offset(pgd, addr);
|
|
||||||
if (!p4d_none(*p4d))
|
if (!p4d_none(*p4d))
|
||||||
walk_pud_level(m, st, p4d, addr);
|
walk_pud_level(m, st, p4d, addr);
|
||||||
else
|
else
|
||||||
|
|
|
@ -327,6 +327,7 @@ static noinline void do_fault_error(struct pt_regs *regs, int access,
|
||||||
case VM_FAULT_BADACCESS:
|
case VM_FAULT_BADACCESS:
|
||||||
if (access == VM_EXEC && signal_return(regs) == 0)
|
if (access == VM_EXEC && signal_return(regs) == 0)
|
||||||
break;
|
break;
|
||||||
|
/* fallthrough */
|
||||||
case VM_FAULT_BADMAP:
|
case VM_FAULT_BADMAP:
|
||||||
/* Bad memory access. Check if it is kernel or user space. */
|
/* Bad memory access. Check if it is kernel or user space. */
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
|
@ -336,7 +337,9 @@ static noinline void do_fault_error(struct pt_regs *regs, int access,
|
||||||
do_sigsegv(regs, si_code);
|
do_sigsegv(regs, si_code);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* fallthrough */
|
||||||
case VM_FAULT_BADCONTEXT:
|
case VM_FAULT_BADCONTEXT:
|
||||||
|
/* fallthrough */
|
||||||
case VM_FAULT_PFAULT:
|
case VM_FAULT_PFAULT:
|
||||||
do_no_context(regs);
|
do_no_context(regs);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2424,8 +2424,8 @@ EXPORT_SYMBOL_GPL(gmap_pmdp_idte_global);
|
||||||
* This function is assumed to be called with the guest_table_lock
|
* This function is assumed to be called with the guest_table_lock
|
||||||
* held.
|
* held.
|
||||||
*/
|
*/
|
||||||
bool gmap_test_and_clear_dirty_pmd(struct gmap *gmap, pmd_t *pmdp,
|
static bool gmap_test_and_clear_dirty_pmd(struct gmap *gmap, pmd_t *pmdp,
|
||||||
unsigned long gaddr)
|
unsigned long gaddr)
|
||||||
{
|
{
|
||||||
if (pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID)
|
if (pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -11,8 +11,7 @@ chkbss: $(addprefix $(obj)/, $(chkbss-files))
|
||||||
|
|
||||||
quiet_cmd_chkbss = CHKBSS $<
|
quiet_cmd_chkbss = CHKBSS $<
|
||||||
cmd_chkbss = \
|
cmd_chkbss = \
|
||||||
if $(OBJDUMP) -h $< | grep -q "\.bss" && \
|
if ! $(OBJSIZE) --common $< | $(AWK) 'END { if ($$3) exit 1 }'; then \
|
||||||
! $(OBJDUMP) -j .bss -w -h $< | awk 'END { if ($$3) exit 1 }'; then \
|
|
||||||
echo "error: $< .bss section is not empty" >&2; exit 1; \
|
echo "error: $< .bss section is not empty" >&2; exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
touch $@;
|
touch $@;
|
||||||
|
|
|
@ -37,6 +37,14 @@ int memcmp(const void *s1, const void *s2, size_t len)
|
||||||
return diff;
|
return diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clang may lower `memcmp == 0` to `bcmp == 0`.
|
||||||
|
*/
|
||||||
|
int bcmp(const void *s1, const void *s2, size_t len)
|
||||||
|
{
|
||||||
|
return memcmp(s1, s2, len);
|
||||||
|
}
|
||||||
|
|
||||||
int strcmp(const char *str1, const char *str2)
|
int strcmp(const char *str1, const char *str2)
|
||||||
{
|
{
|
||||||
const unsigned char *s1 = (const unsigned char *)str1;
|
const unsigned char *s1 = (const unsigned char *)str1;
|
||||||
|
|
|
@ -314,6 +314,23 @@ For 32-bit we have the following conventions - kernel is built with
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mitigate Spectre v1 for conditional swapgs code paths.
|
||||||
|
*
|
||||||
|
* FENCE_SWAPGS_USER_ENTRY is used in the user entry swapgs code path, to
|
||||||
|
* prevent a speculative swapgs when coming from kernel space.
|
||||||
|
*
|
||||||
|
* FENCE_SWAPGS_KERNEL_ENTRY is used in the kernel entry non-swapgs code path,
|
||||||
|
* to prevent the swapgs from getting speculatively skipped when coming from
|
||||||
|
* user space.
|
||||||
|
*/
|
||||||
|
.macro FENCE_SWAPGS_USER_ENTRY
|
||||||
|
ALTERNATIVE "", "lfence", X86_FEATURE_FENCE_SWAPGS_USER
|
||||||
|
.endm
|
||||||
|
.macro FENCE_SWAPGS_KERNEL_ENTRY
|
||||||
|
ALTERNATIVE "", "lfence", X86_FEATURE_FENCE_SWAPGS_KERNEL
|
||||||
|
.endm
|
||||||
|
|
||||||
.macro STACKLEAK_ERASE_NOCLOBBER
|
.macro STACKLEAK_ERASE_NOCLOBBER
|
||||||
#ifdef CONFIG_GCC_PLUGIN_STACKLEAK
|
#ifdef CONFIG_GCC_PLUGIN_STACKLEAK
|
||||||
PUSH_AND_CLEAR_REGS
|
PUSH_AND_CLEAR_REGS
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue