Merge branch 'deprecated/android-4.14-stable' of https://android.googlesource.com/kernel/common into lineage-21.0
Change-Id: I8750f4152cf3c402ef61f9266766128541dfa05c
This commit is contained in:
@@ -59,17 +59,18 @@ class
|
|||||||
|
|
||||||
dma_mode
|
dma_mode
|
||||||
|
|
||||||
Transfer modes supported by the device when in DMA mode.
|
DMA transfer mode used by the device.
|
||||||
Mostly used by PATA device.
|
Mostly used by PATA device.
|
||||||
|
|
||||||
pio_mode
|
pio_mode
|
||||||
|
|
||||||
Transfer modes supported by the device when in PIO mode.
|
PIO transfer mode used by the device.
|
||||||
Mostly used by PATA device.
|
Mostly used by PATA device.
|
||||||
|
|
||||||
xfer_mode
|
xfer_mode
|
||||||
|
|
||||||
Current transfer mode.
|
Current transfer mode.
|
||||||
|
Mostly used by PATA device.
|
||||||
|
|
||||||
id
|
id
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ Description:
|
|||||||
Raw capacitance measurement from channel Y. Units after
|
Raw capacitance measurement from channel Y. Units after
|
||||||
application of scale and offset are nanofarads.
|
application of scale and offset are nanofarads.
|
||||||
|
|
||||||
What: /sys/.../iio:deviceX/in_capacitanceY-in_capacitanceZ_raw
|
What: /sys/.../iio:deviceX/in_capacitanceY-capacitanceZ_raw
|
||||||
KernelVersion: 3.2
|
KernelVersion: 3.2
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
@@ -1524,7 +1524,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw
|
|||||||
KernelVersion: 4.3
|
KernelVersion: 4.3
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
Raw (unscaled no offset etc.) percentage reading of a substance.
|
Raw (unscaled no offset etc.) reading of a substance. Units
|
||||||
|
after application of scale and offset are percents.
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_resistance_raw
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_resistanceX_raw
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
What: /sys/bus/iio/devices/iio:deviceX/conversion_mode
|
What: /sys/bus/iio/devices/iio:deviceX/in_conversion_mode
|
||||||
KernelVersion: 4.2
|
KernelVersion: 4.2
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
|
|||||||
@@ -375,15 +375,17 @@ Description: information about CPUs heterogeneity.
|
|||||||
cpu_capacity: capacity of cpu#.
|
cpu_capacity: capacity of cpu#.
|
||||||
|
|
||||||
What: /sys/devices/system/cpu/vulnerabilities
|
What: /sys/devices/system/cpu/vulnerabilities
|
||||||
/sys/devices/system/cpu/vulnerabilities/meltdown
|
/sys/devices/system/cpu/vulnerabilities/gather_data_sampling
|
||||||
/sys/devices/system/cpu/vulnerabilities/spectre_v1
|
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
||||||
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/l1tf
|
/sys/devices/system/cpu/vulnerabilities/l1tf
|
||||||
/sys/devices/system/cpu/vulnerabilities/mds
|
/sys/devices/system/cpu/vulnerabilities/mds
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/meltdown
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spectre_v1
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
||||||
/sys/devices/system/cpu/vulnerabilities/srbds
|
/sys/devices/system/cpu/vulnerabilities/srbds
|
||||||
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
||||||
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
|
||||||
Date: January 2018
|
Date: January 2018
|
||||||
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||||
Description: Information about CPU vulnerabilities
|
Description: Information about CPU vulnerabilities
|
||||||
|
|||||||
6
Documentation/ABI/testing/sysfs-kernel-oops_count
Normal file
6
Documentation/ABI/testing/sysfs-kernel-oops_count
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
What: /sys/kernel/oops_count
|
||||||
|
Date: November 2022
|
||||||
|
KernelVersion: 6.2.0
|
||||||
|
Contact: Linux Kernel Hardening List <linux-hardening@vger.kernel.org>
|
||||||
|
Description:
|
||||||
|
Shows how many times the system has Oopsed since last boot.
|
||||||
6
Documentation/ABI/testing/sysfs-kernel-warn_count
Normal file
6
Documentation/ABI/testing/sysfs-kernel-warn_count
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
What: /sys/kernel/warn_count
|
||||||
|
Date: November 2022
|
||||||
|
KernelVersion: 6.2.0
|
||||||
|
Contact: Linux Kernel Hardening List <linux-hardening@vger.kernel.org>
|
||||||
|
Description:
|
||||||
|
Shows how many times the system has Warned since last boot.
|
||||||
@@ -2989,10 +2989,10 @@
|
|||||||
65 = /dev/infiniband/issm1 Second InfiniBand IsSM device
|
65 = /dev/infiniband/issm1 Second InfiniBand IsSM device
|
||||||
...
|
...
|
||||||
127 = /dev/infiniband/issm63 63rd InfiniBand IsSM device
|
127 = /dev/infiniband/issm63 63rd InfiniBand IsSM device
|
||||||
128 = /dev/infiniband/uverbs0 First InfiniBand verbs device
|
192 = /dev/infiniband/uverbs0 First InfiniBand verbs device
|
||||||
129 = /dev/infiniband/uverbs1 Second InfiniBand verbs device
|
193 = /dev/infiniband/uverbs1 Second InfiniBand verbs device
|
||||||
...
|
...
|
||||||
159 = /dev/infiniband/uverbs31 31st InfiniBand verbs device
|
223 = /dev/infiniband/uverbs31 31st InfiniBand verbs device
|
||||||
|
|
||||||
232 char Biometric Devices
|
232 char Biometric Devices
|
||||||
0 = /dev/biometric/sensor0/fingerprint first fingerprint sensor on first device
|
0 = /dev/biometric/sensor0/fingerprint first fingerprint sensor on first device
|
||||||
|
|||||||
109
Documentation/admin-guide/hw-vuln/gather_data_sampling.rst
Normal file
109
Documentation/admin-guide/hw-vuln/gather_data_sampling.rst
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
GDS - Gather Data Sampling
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Gather Data Sampling is a hardware vulnerability which allows unprivileged
|
||||||
|
speculative access to data which was previously stored in vector registers.
|
||||||
|
|
||||||
|
Problem
|
||||||
|
-------
|
||||||
|
When a gather instruction performs loads from memory, different data elements
|
||||||
|
are merged into the destination vector register. However, when a gather
|
||||||
|
instruction that is transiently executed encounters a fault, stale data from
|
||||||
|
architectural or internal vector registers may get transiently forwarded to the
|
||||||
|
destination vector register instead. This will allow a malicious attacker to
|
||||||
|
infer stale data using typical side channel techniques like cache timing
|
||||||
|
attacks. GDS is a purely sampling-based attack.
|
||||||
|
|
||||||
|
The attacker uses gather instructions to infer the stale vector register data.
|
||||||
|
The victim does not need to do anything special other than use the vector
|
||||||
|
registers. The victim does not need to use gather instructions to be
|
||||||
|
vulnerable.
|
||||||
|
|
||||||
|
Because the buffers are shared between Hyper-Threads cross Hyper-Thread attacks
|
||||||
|
are possible.
|
||||||
|
|
||||||
|
Attack scenarios
|
||||||
|
----------------
|
||||||
|
Without mitigation, GDS can infer stale data across virtually all
|
||||||
|
permission boundaries:
|
||||||
|
|
||||||
|
Non-enclaves can infer SGX enclave data
|
||||||
|
Userspace can infer kernel data
|
||||||
|
Guests can infer data from hosts
|
||||||
|
Guest can infer guest from other guests
|
||||||
|
Users can infer data from other users
|
||||||
|
|
||||||
|
Because of this, it is important to ensure that the mitigation stays enabled in
|
||||||
|
lower-privilege contexts like guests and when running outside SGX enclaves.
|
||||||
|
|
||||||
|
The hardware enforces the mitigation for SGX. Likewise, VMMs should ensure
|
||||||
|
that guests are not allowed to disable the GDS mitigation. If a host erred and
|
||||||
|
allowed this, a guest could theoretically disable GDS mitigation, mount an
|
||||||
|
attack, and re-enable it.
|
||||||
|
|
||||||
|
Mitigation mechanism
|
||||||
|
--------------------
|
||||||
|
This issue is mitigated in microcode. The microcode defines the following new
|
||||||
|
bits:
|
||||||
|
|
||||||
|
================================ === ============================
|
||||||
|
IA32_ARCH_CAPABILITIES[GDS_CTRL] R/O Enumerates GDS vulnerability
|
||||||
|
and mitigation support.
|
||||||
|
IA32_ARCH_CAPABILITIES[GDS_NO] R/O Processor is not vulnerable.
|
||||||
|
IA32_MCU_OPT_CTRL[GDS_MITG_DIS] R/W Disables the mitigation
|
||||||
|
0 by default.
|
||||||
|
IA32_MCU_OPT_CTRL[GDS_MITG_LOCK] R/W Locks GDS_MITG_DIS=0. Writes
|
||||||
|
to GDS_MITG_DIS are ignored
|
||||||
|
Can't be cleared once set.
|
||||||
|
================================ === ============================
|
||||||
|
|
||||||
|
GDS can also be mitigated on systems that don't have updated microcode by
|
||||||
|
disabling AVX. This can be done by setting gather_data_sampling="force" or
|
||||||
|
"clearcpuid=avx" on the kernel command-line.
|
||||||
|
|
||||||
|
If used, these options will disable AVX use by turning off XSAVE YMM support.
|
||||||
|
However, the processor will still enumerate AVX support. Userspace that
|
||||||
|
does not follow proper AVX enumeration to check both AVX *and* XSAVE YMM
|
||||||
|
support will break.
|
||||||
|
|
||||||
|
Mitigation control on the kernel command line
|
||||||
|
---------------------------------------------
|
||||||
|
The mitigation can be disabled by setting "gather_data_sampling=off" or
|
||||||
|
"mitigations=off" on the kernel command line. Not specifying either will default
|
||||||
|
to the mitigation being enabled. Specifying "gather_data_sampling=force" will
|
||||||
|
use the microcode mitigation when available or disable AVX on affected systems
|
||||||
|
where the microcode hasn't been updated to include the mitigation.
|
||||||
|
|
||||||
|
GDS System Information
|
||||||
|
------------------------
|
||||||
|
The kernel provides vulnerability status information through sysfs. For
|
||||||
|
GDS this can be accessed by the following sysfs file:
|
||||||
|
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/gather_data_sampling
|
||||||
|
|
||||||
|
The possible values contained in this file are:
|
||||||
|
|
||||||
|
============================== =============================================
|
||||||
|
Not affected Processor not vulnerable.
|
||||||
|
Vulnerable Processor vulnerable and mitigation disabled.
|
||||||
|
Vulnerable: No microcode Processor vulnerable and microcode is missing
|
||||||
|
mitigation.
|
||||||
|
Mitigation: AVX disabled,
|
||||||
|
no microcode Processor is vulnerable and microcode is missing
|
||||||
|
mitigation. AVX disabled as mitigation.
|
||||||
|
Mitigation: Microcode Processor is vulnerable and mitigation is in
|
||||||
|
effect.
|
||||||
|
Mitigation: Microcode (locked) Processor is vulnerable and mitigation is in
|
||||||
|
effect and cannot be disabled.
|
||||||
|
Unknown: Dependent on
|
||||||
|
hypervisor status Running on a virtual guest processor that is
|
||||||
|
affected but with no way to know if host
|
||||||
|
processor is mitigated or vulnerable.
|
||||||
|
============================== =============================================
|
||||||
|
|
||||||
|
GDS Default mitigation
|
||||||
|
----------------------
|
||||||
|
The updated microcode will enable the mitigation by default. The kernel's
|
||||||
|
default action is to leave the mitigation enabled.
|
||||||
@@ -15,3 +15,5 @@ are configurable at compile, boot or run time.
|
|||||||
tsx_async_abort
|
tsx_async_abort
|
||||||
multihit.rst
|
multihit.rst
|
||||||
special-register-buffer-data-sampling.rst
|
special-register-buffer-data-sampling.rst
|
||||||
|
processor_mmio_stale_data.rst
|
||||||
|
gather_data_sampling.rst
|
||||||
|
|||||||
260
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
Normal file
260
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
Normal file
@@ -0,0 +1,260 @@
|
|||||||
|
=========================================
|
||||||
|
Processor MMIO Stale Data Vulnerabilities
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Processor MMIO Stale Data Vulnerabilities are a class of memory-mapped I/O
|
||||||
|
(MMIO) vulnerabilities that can expose data. The sequences of operations for
|
||||||
|
exposing data range from simple to very complex. Because most of the
|
||||||
|
vulnerabilities require the attacker to have access to MMIO, many environments
|
||||||
|
are not affected. System environments using virtualization where MMIO access is
|
||||||
|
provided to untrusted guests may need mitigation. These vulnerabilities are
|
||||||
|
not transient execution attacks. However, these vulnerabilities may propagate
|
||||||
|
stale data into core fill buffers where the data can subsequently be inferred
|
||||||
|
by an unmitigated transient execution attack. Mitigation for these
|
||||||
|
vulnerabilities includes a combination of microcode update and software
|
||||||
|
changes, depending on the platform and usage model. Some of these mitigations
|
||||||
|
are similar to those used to mitigate Microarchitectural Data Sampling (MDS) or
|
||||||
|
those used to mitigate Special Register Buffer Data Sampling (SRBDS).
|
||||||
|
|
||||||
|
Data Propagators
|
||||||
|
================
|
||||||
|
Propagators are operations that result in stale data being copied or moved from
|
||||||
|
one microarchitectural buffer or register to another. Processor MMIO Stale Data
|
||||||
|
Vulnerabilities are operations that may result in stale data being directly
|
||||||
|
read into an architectural, software-visible state or sampled from a buffer or
|
||||||
|
register.
|
||||||
|
|
||||||
|
Fill Buffer Stale Data Propagator (FBSDP)
|
||||||
|
-----------------------------------------
|
||||||
|
Stale data may propagate from fill buffers (FB) into the non-coherent portion
|
||||||
|
of the uncore on some non-coherent writes. Fill buffer propagation by itself
|
||||||
|
does not make stale data architecturally visible. Stale data must be propagated
|
||||||
|
to a location where it is subject to reading or sampling.
|
||||||
|
|
||||||
|
Sideband Stale Data Propagator (SSDP)
|
||||||
|
-------------------------------------
|
||||||
|
The sideband stale data propagator (SSDP) is limited to the client (including
|
||||||
|
Intel Xeon server E3) uncore implementation. The sideband response buffer is
|
||||||
|
shared by all client cores. For non-coherent reads that go to sideband
|
||||||
|
destinations, the uncore logic returns 64 bytes of data to the core, including
|
||||||
|
both requested data and unrequested stale data, from a transaction buffer and
|
||||||
|
the sideband response buffer. As a result, stale data from the sideband
|
||||||
|
response and transaction buffers may now reside in a core fill buffer.
|
||||||
|
|
||||||
|
Primary Stale Data Propagator (PSDP)
|
||||||
|
------------------------------------
|
||||||
|
The primary stale data propagator (PSDP) is limited to the client (including
|
||||||
|
Intel Xeon server E3) uncore implementation. Similar to the sideband response
|
||||||
|
buffer, the primary response buffer is shared by all client cores. For some
|
||||||
|
processors, MMIO primary reads will return 64 bytes of data to the core fill
|
||||||
|
buffer including both requested data and unrequested stale data. This is
|
||||||
|
similar to the sideband stale data propagator.
|
||||||
|
|
||||||
|
Vulnerabilities
|
||||||
|
===============
|
||||||
|
Device Register Partial Write (DRPW) (CVE-2022-21166)
|
||||||
|
-----------------------------------------------------
|
||||||
|
Some endpoint MMIO registers incorrectly handle writes that are smaller than
|
||||||
|
the register size. Instead of aborting the write or only copying the correct
|
||||||
|
subset of bytes (for example, 2 bytes for a 2-byte write), more bytes than
|
||||||
|
specified by the write transaction may be written to the register. On
|
||||||
|
processors affected by FBSDP, this may expose stale data from the fill buffers
|
||||||
|
of the core that created the write transaction.
|
||||||
|
|
||||||
|
Shared Buffers Data Sampling (SBDS) (CVE-2022-21125)
|
||||||
|
----------------------------------------------------
|
||||||
|
After propagators may have moved data around the uncore and copied stale data
|
||||||
|
into client core fill buffers, processors affected by MFBDS can leak data from
|
||||||
|
the fill buffer. It is limited to the client (including Intel Xeon server E3)
|
||||||
|
uncore implementation.
|
||||||
|
|
||||||
|
Shared Buffers Data Read (SBDR) (CVE-2022-21123)
|
||||||
|
------------------------------------------------
|
||||||
|
It is similar to Shared Buffer Data Sampling (SBDS) except that the data is
|
||||||
|
directly read into the architectural software-visible state. It is limited to
|
||||||
|
the client (including Intel Xeon server E3) uncore implementation.
|
||||||
|
|
||||||
|
Affected Processors
|
||||||
|
===================
|
||||||
|
Not all the CPUs are affected by all the variants. For instance, most
|
||||||
|
processors for the server market (excluding Intel Xeon E3 processors) are
|
||||||
|
impacted by only Device Register Partial Write (DRPW).
|
||||||
|
|
||||||
|
Below is the list of affected Intel processors [#f1]_:
|
||||||
|
|
||||||
|
=================== ============ =========
|
||||||
|
Common name Family_Model Steppings
|
||||||
|
=================== ============ =========
|
||||||
|
HASWELL_X 06_3FH 2,4
|
||||||
|
SKYLAKE_L 06_4EH 3
|
||||||
|
BROADWELL_X 06_4FH All
|
||||||
|
SKYLAKE_X 06_55H 3,4,6,7,11
|
||||||
|
BROADWELL_D 06_56H 3,4,5
|
||||||
|
SKYLAKE 06_5EH 3
|
||||||
|
ICELAKE_X 06_6AH 4,5,6
|
||||||
|
ICELAKE_D 06_6CH 1
|
||||||
|
ICELAKE_L 06_7EH 5
|
||||||
|
ATOM_TREMONT_D 06_86H All
|
||||||
|
LAKEFIELD 06_8AH 1
|
||||||
|
KABYLAKE_L 06_8EH 9 to 12
|
||||||
|
ATOM_TREMONT 06_96H 1
|
||||||
|
ATOM_TREMONT_L 06_9CH 0
|
||||||
|
KABYLAKE 06_9EH 9 to 13
|
||||||
|
COMETLAKE 06_A5H 2,3,5
|
||||||
|
COMETLAKE_L 06_A6H 0,1
|
||||||
|
ROCKETLAKE 06_A7H 1
|
||||||
|
=================== ============ =========
|
||||||
|
|
||||||
|
If a CPU is in the affected processor list, but not affected by a variant, it
|
||||||
|
is indicated by new bits in MSR IA32_ARCH_CAPABILITIES. As described in a later
|
||||||
|
section, mitigation largely remains the same for all the variants, i.e. to
|
||||||
|
clear the CPU fill buffers via VERW instruction.
|
||||||
|
|
||||||
|
New bits in MSRs
|
||||||
|
================
|
||||||
|
Newer processors and microcode update on existing affected processors added new
|
||||||
|
bits to IA32_ARCH_CAPABILITIES MSR. These bits can be used to enumerate
|
||||||
|
specific variants of Processor MMIO Stale Data vulnerabilities and mitigation
|
||||||
|
capability.
|
||||||
|
|
||||||
|
MSR IA32_ARCH_CAPABILITIES
|
||||||
|
--------------------------
|
||||||
|
Bit 13 - SBDR_SSDP_NO - When set, processor is not affected by either the
|
||||||
|
Shared Buffers Data Read (SBDR) vulnerability or the sideband stale
|
||||||
|
data propagator (SSDP).
|
||||||
|
Bit 14 - FBSDP_NO - When set, processor is not affected by the Fill Buffer
|
||||||
|
Stale Data Propagator (FBSDP).
|
||||||
|
Bit 15 - PSDP_NO - When set, processor is not affected by Primary Stale Data
|
||||||
|
Propagator (PSDP).
|
||||||
|
Bit 17 - FB_CLEAR - When set, VERW instruction will overwrite CPU fill buffer
|
||||||
|
values as part of MD_CLEAR operations. Processors that do not
|
||||||
|
enumerate MDS_NO (meaning they are affected by MDS) but that do
|
||||||
|
enumerate support for both L1D_FLUSH and MD_CLEAR implicitly enumerate
|
||||||
|
FB_CLEAR as part of their MD_CLEAR support.
|
||||||
|
Bit 18 - FB_CLEAR_CTRL - Processor supports read and write to MSR
|
||||||
|
IA32_MCU_OPT_CTRL[FB_CLEAR_DIS]. On such processors, the FB_CLEAR_DIS
|
||||||
|
bit can be set to cause the VERW instruction to not perform the
|
||||||
|
FB_CLEAR action. Not all processors that support FB_CLEAR will support
|
||||||
|
FB_CLEAR_CTRL.
|
||||||
|
|
||||||
|
MSR IA32_MCU_OPT_CTRL
|
||||||
|
---------------------
|
||||||
|
Bit 3 - FB_CLEAR_DIS - When set, VERW instruction does not perform the FB_CLEAR
|
||||||
|
action. This may be useful to reduce the performance impact of FB_CLEAR in
|
||||||
|
cases where system software deems it warranted (for example, when performance
|
||||||
|
is more critical, or the untrusted software has no MMIO access). Note that
|
||||||
|
FB_CLEAR_DIS has no impact on enumeration (for example, it does not change
|
||||||
|
FB_CLEAR or MD_CLEAR enumeration) and it may not be supported on all processors
|
||||||
|
that enumerate FB_CLEAR.
|
||||||
|
|
||||||
|
Mitigation
|
||||||
|
==========
|
||||||
|
Like MDS, all variants of Processor MMIO Stale Data vulnerabilities have the
|
||||||
|
same mitigation strategy to force the CPU to clear the affected buffers before
|
||||||
|
an attacker can extract the secrets.
|
||||||
|
|
||||||
|
This is achieved by using the otherwise unused and obsolete VERW instruction in
|
||||||
|
combination with a microcode update. The microcode clears the affected CPU
|
||||||
|
buffers when the VERW instruction is executed.
|
||||||
|
|
||||||
|
Kernel reuses the MDS function to invoke the buffer clearing:
|
||||||
|
|
||||||
|
mds_clear_cpu_buffers()
|
||||||
|
|
||||||
|
On MDS affected CPUs, the kernel already invokes CPU buffer clear on
|
||||||
|
kernel/userspace, hypervisor/guest and C-state (idle) transitions. No
|
||||||
|
additional mitigation is needed on such CPUs.
|
||||||
|
|
||||||
|
For CPUs not affected by MDS or TAA, mitigation is needed only for the attacker
|
||||||
|
with MMIO capability. Therefore, VERW is not required for kernel/userspace. For
|
||||||
|
virtualization case, VERW is only needed at VMENTER for a guest with MMIO
|
||||||
|
capability.
|
||||||
|
|
||||||
|
Mitigation points
|
||||||
|
-----------------
|
||||||
|
Return to user space
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Same mitigation as MDS when affected by MDS/TAA, otherwise no mitigation
|
||||||
|
needed.
|
||||||
|
|
||||||
|
C-State transition
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
Control register writes by CPU during C-state transition can propagate data
|
||||||
|
from fill buffer to uncore buffers. Execute VERW before C-state transition to
|
||||||
|
clear CPU fill buffers.
|
||||||
|
|
||||||
|
Guest entry point
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
Same mitigation as MDS when processor is also affected by MDS/TAA, otherwise
|
||||||
|
execute VERW at VMENTER only for MMIO capable guests. On CPUs not affected by
|
||||||
|
MDS/TAA, guest without MMIO access cannot extract secrets using Processor MMIO
|
||||||
|
Stale Data vulnerabilities, so there is no need to execute VERW for such guests.
|
||||||
|
|
||||||
|
Mitigation control on the kernel command line
|
||||||
|
---------------------------------------------
|
||||||
|
The kernel command line allows to control the Processor MMIO Stale Data
|
||||||
|
mitigations at boot time with the option "mmio_stale_data=". The valid
|
||||||
|
arguments for this option are:
|
||||||
|
|
||||||
|
========== =================================================================
|
||||||
|
full If the CPU is vulnerable, enable mitigation; CPU buffer clearing
|
||||||
|
on exit to userspace and when entering a VM. Idle transitions are
|
||||||
|
protected as well. It does not automatically disable SMT.
|
||||||
|
full,nosmt Same as full, with SMT disabled on vulnerable CPUs. This is the
|
||||||
|
complete mitigation.
|
||||||
|
off Disables mitigation completely.
|
||||||
|
========== =================================================================
|
||||||
|
|
||||||
|
If the CPU is affected and mmio_stale_data=off is not supplied on the kernel
|
||||||
|
command line, then the kernel selects the appropriate mitigation.
|
||||||
|
|
||||||
|
Mitigation status information
|
||||||
|
-----------------------------
|
||||||
|
The Linux kernel provides a sysfs interface to enumerate the current
|
||||||
|
vulnerability status of the system: whether the system is vulnerable, and
|
||||||
|
which mitigations are active. The relevant sysfs file is:
|
||||||
|
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
||||||
|
|
||||||
|
The possible values in this file are:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
|
||||||
|
* - 'Not affected'
|
||||||
|
- The processor is not vulnerable
|
||||||
|
* - 'Vulnerable'
|
||||||
|
- The processor is vulnerable, but no mitigation enabled
|
||||||
|
* - 'Vulnerable: Clear CPU buffers attempted, no microcode'
|
||||||
|
- The processor is vulnerable, but microcode is not updated. The
|
||||||
|
mitigation is enabled on a best effort basis.
|
||||||
|
* - 'Mitigation: Clear CPU buffers'
|
||||||
|
- The processor is vulnerable and the CPU buffer clearing mitigation is
|
||||||
|
enabled.
|
||||||
|
* - 'Unknown: No mitigations'
|
||||||
|
- The processor vulnerability status is unknown because it is
|
||||||
|
out of Servicing period. Mitigation is not attempted.
|
||||||
|
|
||||||
|
Definitions:
|
||||||
|
------------
|
||||||
|
|
||||||
|
Servicing period: The process of providing functional and security updates to
|
||||||
|
Intel processors or platforms, utilizing the Intel Platform Update (IPU)
|
||||||
|
process or other similar mechanisms.
|
||||||
|
|
||||||
|
End of Servicing Updates (ESU): ESU is the date at which Intel will no
|
||||||
|
longer provide Servicing, such as through IPU or other similar update
|
||||||
|
processes. ESU dates will typically be aligned to end of quarter.
|
||||||
|
|
||||||
|
If the processor is vulnerable then the following information is appended to
|
||||||
|
the above information:
|
||||||
|
|
||||||
|
======================== ===========================================
|
||||||
|
'SMT vulnerable' SMT is enabled
|
||||||
|
'SMT disabled' SMT is disabled
|
||||||
|
'SMT Host state unknown' Kernel runs in a VM, Host SMT state unknown
|
||||||
|
======================== ===========================================
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
.. [#f1] Affected Processors
|
||||||
|
https://www.intel.com/content/www/us/en/developer/topic-technology/software-security-guidance/processors-affected-consolidated-product-cpu-model.html
|
||||||
@@ -60,8 +60,8 @@ privileged data touched during the speculative execution.
|
|||||||
Spectre variant 1 attacks take advantage of speculative execution of
|
Spectre variant 1 attacks take advantage of speculative execution of
|
||||||
conditional branches, while Spectre variant 2 attacks use speculative
|
conditional branches, while Spectre variant 2 attacks use speculative
|
||||||
execution of indirect branches to leak privileged memory.
|
execution of indirect branches to leak privileged memory.
|
||||||
See :ref:`[1] <spec_ref1>` :ref:`[5] <spec_ref5>` :ref:`[7] <spec_ref7>`
|
See :ref:`[1] <spec_ref1>` :ref:`[5] <spec_ref5>` :ref:`[6] <spec_ref6>`
|
||||||
:ref:`[10] <spec_ref10>` :ref:`[11] <spec_ref11>`.
|
:ref:`[7] <spec_ref7>` :ref:`[10] <spec_ref10>` :ref:`[11] <spec_ref11>`.
|
||||||
|
|
||||||
Spectre variant 1 (Bounds Check Bypass)
|
Spectre variant 1 (Bounds Check Bypass)
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
@@ -131,6 +131,19 @@ steer its indirect branch speculations to gadget code, and measure the
|
|||||||
speculative execution's side effects left in level 1 cache to infer the
|
speculative execution's side effects left in level 1 cache to infer the
|
||||||
victim's data.
|
victim's data.
|
||||||
|
|
||||||
|
Yet another variant 2 attack vector is for the attacker to poison the
|
||||||
|
Branch History Buffer (BHB) to speculatively steer an indirect branch
|
||||||
|
to a specific Branch Target Buffer (BTB) entry, even if the entry isn't
|
||||||
|
associated with the source address of the indirect branch. Specifically,
|
||||||
|
the BHB might be shared across privilege levels even in the presence of
|
||||||
|
Enhanced IBRS.
|
||||||
|
|
||||||
|
Currently the only known real-world BHB attack vector is via
|
||||||
|
unprivileged eBPF. Therefore, it's highly recommended to not enable
|
||||||
|
unprivileged eBPF, especially when eIBRS is used (without retpolines).
|
||||||
|
For a full mitigation against BHB attacks, it's recommended to use
|
||||||
|
retpolines (or eIBRS combined with retpolines).
|
||||||
|
|
||||||
Attack scenarios
|
Attack scenarios
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@@ -364,13 +377,15 @@ The possible values in this file are:
|
|||||||
|
|
||||||
- Kernel status:
|
- Kernel status:
|
||||||
|
|
||||||
==================================== =================================
|
======================================== =================================
|
||||||
'Not affected' The processor is not vulnerable
|
'Not affected' The processor is not vulnerable
|
||||||
'Vulnerable' Vulnerable, no mitigation
|
'Mitigation: None' Vulnerable, no mitigation
|
||||||
'Mitigation: Full generic retpoline' Software-focused mitigation
|
'Mitigation: Retpolines' Use Retpoline thunks
|
||||||
'Mitigation: Full AMD retpoline' AMD-specific software mitigation
|
'Mitigation: LFENCE' Use LFENCE instructions
|
||||||
'Mitigation: Enhanced IBRS' Hardware-focused mitigation
|
'Mitigation: Enhanced IBRS' Hardware-focused mitigation
|
||||||
==================================== =================================
|
'Mitigation: Enhanced IBRS + Retpolines' Hardware-focused + Retpolines
|
||||||
|
'Mitigation: Enhanced IBRS + LFENCE' Hardware-focused + LFENCE
|
||||||
|
======================================== =================================
|
||||||
|
|
||||||
- Firmware status: Show if Indirect Branch Restricted Speculation (IBRS) is
|
- Firmware status: Show if Indirect Branch Restricted Speculation (IBRS) is
|
||||||
used to protect against Spectre variant 2 attacks when calling firmware (x86 only).
|
used to protect against Spectre variant 2 attacks when calling firmware (x86 only).
|
||||||
@@ -407,6 +422,14 @@ The possible values in this file are:
|
|||||||
'RSB filling' Protection of RSB on context switch enabled
|
'RSB filling' Protection of RSB on context switch enabled
|
||||||
============= ===========================================
|
============= ===========================================
|
||||||
|
|
||||||
|
- EIBRS Post-barrier Return Stack Buffer (PBRSB) protection status:
|
||||||
|
|
||||||
|
=========================== =======================================================
|
||||||
|
'PBRSB-eIBRS: SW sequence' CPU is affected and protection of RSB on VMEXIT enabled
|
||||||
|
'PBRSB-eIBRS: Vulnerable' CPU is vulnerable
|
||||||
|
'PBRSB-eIBRS: Not affected' CPU is not affected by PBRSB
|
||||||
|
=========================== =======================================================
|
||||||
|
|
||||||
Full mitigation might require a microcode update from the CPU
|
Full mitigation might require a microcode update from the CPU
|
||||||
vendor. When the necessary microcode is not available, the kernel will
|
vendor. When the necessary microcode is not available, the kernel will
|
||||||
report vulnerability.
|
report vulnerability.
|
||||||
@@ -456,8 +479,16 @@ Spectre variant 2
|
|||||||
On Intel Skylake-era systems the mitigation covers most, but not all,
|
On Intel Skylake-era systems the mitigation covers most, but not all,
|
||||||
cases. See :ref:`[3] <spec_ref3>` for more details.
|
cases. See :ref:`[3] <spec_ref3>` for more details.
|
||||||
|
|
||||||
On CPUs with hardware mitigation for Spectre variant 2 (e.g. Enhanced
|
On CPUs with hardware mitigation for Spectre variant 2 (e.g. IBRS
|
||||||
IBRS on x86), retpoline is automatically disabled at run time.
|
or enhanced IBRS on x86), retpoline is automatically disabled at run time.
|
||||||
|
|
||||||
|
Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at
|
||||||
|
boot, by setting the IBRS bit, and they're automatically protected against
|
||||||
|
Spectre v2 variant attacks, including cross-thread branch target injections
|
||||||
|
on SMT systems (STIBP). In other words, eIBRS enables STIBP too.
|
||||||
|
|
||||||
|
Legacy IBRS systems clear the IBRS bit on exit to userspace and
|
||||||
|
therefore explicitly enable STIBP for that
|
||||||
|
|
||||||
The retpoline mitigation is turned on by default on vulnerable
|
The retpoline mitigation is turned on by default on vulnerable
|
||||||
CPUs. It can be forced on or off by the administrator
|
CPUs. It can be forced on or off by the administrator
|
||||||
@@ -468,7 +499,7 @@ Spectre variant 2
|
|||||||
before invoking any firmware code to prevent Spectre variant 2 exploits
|
before invoking any firmware code to prevent Spectre variant 2 exploits
|
||||||
using the firmware.
|
using the firmware.
|
||||||
|
|
||||||
Using kernel address space randomization (CONFIG_RANDOMIZE_SLAB=y
|
Using kernel address space randomization (CONFIG_RANDOMIZE_BASE=y
|
||||||
and CONFIG_SLAB_FREELIST_RANDOM=y in the kernel configuration) makes
|
and CONFIG_SLAB_FREELIST_RANDOM=y in the kernel configuration) makes
|
||||||
attacks on the kernel generally more difficult.
|
attacks on the kernel generally more difficult.
|
||||||
|
|
||||||
@@ -481,9 +512,12 @@ Spectre variant 2
|
|||||||
For Spectre variant 2 mitigation, individual user programs
|
For Spectre variant 2 mitigation, individual user programs
|
||||||
can be compiled with return trampolines for indirect branches.
|
can be compiled with return trampolines for indirect branches.
|
||||||
This protects them from consuming poisoned entries in the branch
|
This protects them from consuming poisoned entries in the branch
|
||||||
target buffer left by malicious software. Alternatively, the
|
target buffer left by malicious software.
|
||||||
programs can disable their indirect branch speculation via prctl()
|
|
||||||
(See :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
|
On legacy IBRS systems, at return to userspace, implicit STIBP is disabled
|
||||||
|
because the kernel clears the IBRS bit. In this case, the userspace programs
|
||||||
|
can disable indirect branch speculation via prctl() (See
|
||||||
|
:ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
|
||||||
On x86, this will turn on STIBP to guard against attacks from the
|
On x86, this will turn on STIBP to guard against attacks from the
|
||||||
sibling thread when the user program is running, and use IBPB to
|
sibling thread when the user program is running, and use IBPB to
|
||||||
flush the branch target buffer when switching to/from the program.
|
flush the branch target buffer when switching to/from the program.
|
||||||
@@ -584,12 +618,13 @@ kernel command line.
|
|||||||
|
|
||||||
Specific mitigations can also be selected manually:
|
Specific mitigations can also be selected manually:
|
||||||
|
|
||||||
retpoline
|
retpoline auto pick between generic,lfence
|
||||||
replace indirect branches
|
retpoline,generic Retpolines
|
||||||
retpoline,generic
|
retpoline,lfence LFENCE; indirect branch
|
||||||
google's original retpoline
|
retpoline,amd alias for retpoline,lfence
|
||||||
retpoline,amd
|
eibrs enhanced IBRS
|
||||||
AMD-specific minimal thunk
|
eibrs,retpoline enhanced IBRS + Retpolines
|
||||||
|
eibrs,lfence enhanced IBRS + LFENCE
|
||||||
|
|
||||||
Not specifying this option is equivalent to
|
Not specifying this option is equivalent to
|
||||||
spectre_v2=auto.
|
spectre_v2=auto.
|
||||||
@@ -730,7 +765,7 @@ AMD white papers:
|
|||||||
|
|
||||||
.. _spec_ref6:
|
.. _spec_ref6:
|
||||||
|
|
||||||
[6] `Software techniques for managing speculation on AMD processors <https://developer.amd.com/wp-content/resources/90343-B_SoftwareTechniquesforManagingSpeculation_WP_7-18Update_FNL.pdf>`_.
|
[6] `Software techniques for managing speculation on AMD processors <https://developer.amd.com/wp-content/resources/Managing-Speculation-on-AMD-Processors.pdf>`_.
|
||||||
|
|
||||||
ARM white papers:
|
ARM white papers:
|
||||||
|
|
||||||
|
|||||||
@@ -561,7 +561,7 @@
|
|||||||
loops can be debugged more effectively on production
|
loops can be debugged more effectively on production
|
||||||
systems.
|
systems.
|
||||||
|
|
||||||
clearcpuid=BITNUM [X86]
|
clearcpuid=BITNUM[,BITNUM...] [X86]
|
||||||
Disable CPUID feature X for the kernel. See
|
Disable CPUID feature X for the kernel. See
|
||||||
arch/x86/include/asm/cpufeatures.h for the valid bit
|
arch/x86/include/asm/cpufeatures.h for the valid bit
|
||||||
numbers. Note the Linux specific bits are not necessarily
|
numbers. Note the Linux specific bits are not necessarily
|
||||||
@@ -790,10 +790,6 @@
|
|||||||
|
|
||||||
debugpat [X86] Enable PAT debugging
|
debugpat [X86] Enable PAT debugging
|
||||||
|
|
||||||
decnet.addr= [HW,NET]
|
|
||||||
Format: <area>[,<node>]
|
|
||||||
See also Documentation/networking/decnet.txt.
|
|
||||||
|
|
||||||
default_hugepagesz=
|
default_hugepagesz=
|
||||||
[same as hugepagesz=] The size of the default
|
[same as hugepagesz=] The size of the default
|
||||||
HugeTLB page size. This is the size represented by
|
HugeTLB page size. This is the size represented by
|
||||||
@@ -1254,6 +1250,26 @@
|
|||||||
Format: off | on
|
Format: off | on
|
||||||
default: on
|
default: on
|
||||||
|
|
||||||
|
gather_data_sampling=
|
||||||
|
[X86,INTEL] Control the Gather Data Sampling (GDS)
|
||||||
|
mitigation.
|
||||||
|
|
||||||
|
Gather Data Sampling is a hardware vulnerability which
|
||||||
|
allows unprivileged speculative access to data which was
|
||||||
|
previously stored in vector registers.
|
||||||
|
|
||||||
|
This issue is mitigated by default in updated microcode.
|
||||||
|
The mitigation may have a performance impact but can be
|
||||||
|
disabled. On systems without the microcode mitigation
|
||||||
|
disabling AVX serves as a mitigation.
|
||||||
|
|
||||||
|
force: Disable AVX to mitigate systems without
|
||||||
|
microcode mitigation. No effect if the microcode
|
||||||
|
mitigation is present. Known to cause crashes in
|
||||||
|
userspace with buggy AVX enumeration.
|
||||||
|
|
||||||
|
off: Disable GDS mitigation.
|
||||||
|
|
||||||
gcov_persist= [GCOV] When non-zero (default), profiling data for
|
gcov_persist= [GCOV] When non-zero (default), profiling data for
|
||||||
kernel modules is saved and remains accessible via
|
kernel modules is saved and remains accessible via
|
||||||
debugfs, even when the module is unloaded/reloaded.
|
debugfs, even when the module is unloaded/reloaded.
|
||||||
@@ -1932,8 +1948,12 @@
|
|||||||
Default is 1 (enabled)
|
Default is 1 (enabled)
|
||||||
|
|
||||||
kvm-intel.emulate_invalid_guest_state=
|
kvm-intel.emulate_invalid_guest_state=
|
||||||
[KVM,Intel] Enable emulation of invalid guest states
|
[KVM,Intel] Disable emulation of invalid guest state.
|
||||||
Default is 0 (disabled)
|
Ignored if kvm-intel.enable_unrestricted_guest=1, as
|
||||||
|
guest state is never invalid for unrestricted guests.
|
||||||
|
This param doesn't apply to nested guests (L2), as KVM
|
||||||
|
never emulates invalid L2 guest state.
|
||||||
|
Default is 1 (enabled)
|
||||||
|
|
||||||
kvm-intel.flexpriority=
|
kvm-intel.flexpriority=
|
||||||
[KVM,Intel] Disable FlexPriority feature (TPR shadow).
|
[KVM,Intel] Disable FlexPriority feature (TPR shadow).
|
||||||
@@ -2460,19 +2480,23 @@
|
|||||||
Disable all optional CPU mitigations. This
|
Disable all optional CPU mitigations. This
|
||||||
improves system performance, but it may also
|
improves system performance, but it may also
|
||||||
expose users to several CPU vulnerabilities.
|
expose users to several CPU vulnerabilities.
|
||||||
Equivalent to: nopti [X86,PPC]
|
Equivalent to: gather_data_sampling=off [X86]
|
||||||
kpti=0 [ARM64]
|
kpti=0 [ARM64]
|
||||||
nospectre_v1 [PPC]
|
kvm.nx_huge_pages=off [X86]
|
||||||
nobp=0 [S390]
|
|
||||||
nospectre_v1 [X86]
|
|
||||||
nospectre_v2 [X86,PPC,S390,ARM64]
|
|
||||||
spectre_v2_user=off [X86]
|
|
||||||
spec_store_bypass_disable=off [X86,PPC]
|
|
||||||
ssbd=force-off [ARM64]
|
|
||||||
l1tf=off [X86]
|
l1tf=off [X86]
|
||||||
mds=off [X86]
|
mds=off [X86]
|
||||||
|
mmio_stale_data=off [X86]
|
||||||
|
no_entry_flush [PPC]
|
||||||
|
no_uaccess_flush [PPC]
|
||||||
|
nobp=0 [S390]
|
||||||
|
nopti [X86,PPC]
|
||||||
|
nospectre_v1 [PPC]
|
||||||
|
nospectre_v1 [X86]
|
||||||
|
nospectre_v2 [X86,PPC,S390,ARM64]
|
||||||
|
spec_store_bypass_disable=off [X86,PPC]
|
||||||
|
spectre_v2_user=off [X86]
|
||||||
|
ssbd=force-off [ARM64]
|
||||||
tsx_async_abort=off [X86]
|
tsx_async_abort=off [X86]
|
||||||
kvm.nx_huge_pages=off [X86]
|
|
||||||
|
|
||||||
Exceptions:
|
Exceptions:
|
||||||
This does not have any effect on
|
This does not have any effect on
|
||||||
@@ -2494,6 +2518,7 @@
|
|||||||
Equivalent to: l1tf=flush,nosmt [X86]
|
Equivalent to: l1tf=flush,nosmt [X86]
|
||||||
mds=full,nosmt [X86]
|
mds=full,nosmt [X86]
|
||||||
tsx_async_abort=full,nosmt [X86]
|
tsx_async_abort=full,nosmt [X86]
|
||||||
|
mmio_stale_data=full,nosmt [X86]
|
||||||
|
|
||||||
mminit_loglevel=
|
mminit_loglevel=
|
||||||
[KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
|
[KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
|
||||||
@@ -2503,6 +2528,40 @@
|
|||||||
log everything. Information is printed at KERN_DEBUG
|
log everything. Information is printed at KERN_DEBUG
|
||||||
so loglevel=8 may also need to be specified.
|
so loglevel=8 may also need to be specified.
|
||||||
|
|
||||||
|
mmio_stale_data=
|
||||||
|
[X86,INTEL] Control mitigation for the Processor
|
||||||
|
MMIO Stale Data vulnerabilities.
|
||||||
|
|
||||||
|
Processor MMIO Stale Data is a class of
|
||||||
|
vulnerabilities that may expose data after an MMIO
|
||||||
|
operation. Exposed data could originate or end in
|
||||||
|
the same CPU buffers as affected by MDS and TAA.
|
||||||
|
Therefore, similar to MDS and TAA, the mitigation
|
||||||
|
is to clear the affected CPU buffers.
|
||||||
|
|
||||||
|
This parameter controls the mitigation. The
|
||||||
|
options are:
|
||||||
|
|
||||||
|
full - Enable mitigation on vulnerable CPUs
|
||||||
|
|
||||||
|
full,nosmt - Enable mitigation and disable SMT on
|
||||||
|
vulnerable CPUs.
|
||||||
|
|
||||||
|
off - Unconditionally disable mitigation
|
||||||
|
|
||||||
|
On MDS or TAA affected machines,
|
||||||
|
mmio_stale_data=off can be prevented by an active
|
||||||
|
MDS or TAA mitigation as these vulnerabilities are
|
||||||
|
mitigated with the same mechanism so in order to
|
||||||
|
disable this mitigation, you need to specify
|
||||||
|
mds=off and tsx_async_abort=off too.
|
||||||
|
|
||||||
|
Not specifying this option is equivalent to
|
||||||
|
mmio_stale_data=full.
|
||||||
|
|
||||||
|
For details see:
|
||||||
|
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
|
||||||
|
|
||||||
module.sig_enforce
|
module.sig_enforce
|
||||||
[KNL] When CONFIG_MODULE_SIG is set, this means that
|
[KNL] When CONFIG_MODULE_SIG is set, this means that
|
||||||
modules without (valid) signatures will fail to load.
|
modules without (valid) signatures will fail to load.
|
||||||
@@ -2776,6 +2835,8 @@
|
|||||||
|
|
||||||
noefi Disable EFI runtime services support.
|
noefi Disable EFI runtime services support.
|
||||||
|
|
||||||
|
no_entry_flush [PPC] Don't flush the L1-D cache when entering the kernel.
|
||||||
|
|
||||||
noexec [IA-64]
|
noexec [IA-64]
|
||||||
|
|
||||||
noexec [X86]
|
noexec [X86]
|
||||||
@@ -2825,6 +2886,9 @@
|
|||||||
nospec_store_bypass_disable
|
nospec_store_bypass_disable
|
||||||
[HW] Disable all mitigations for the Speculative Store Bypass vulnerability
|
[HW] Disable all mitigations for the Speculative Store Bypass vulnerability
|
||||||
|
|
||||||
|
no_uaccess_flush
|
||||||
|
[PPC] Don't flush the L1-D cache after accessing user data.
|
||||||
|
|
||||||
noxsave [BUGS=X86] Disables x86 extended register state save
|
noxsave [BUGS=X86] Disables x86 extended register state save
|
||||||
and restore using xsave. The kernel will fallback to
|
and restore using xsave. The kernel will fallback to
|
||||||
enabling legacy floating-point and sse state.
|
enabling legacy floating-point and sse state.
|
||||||
@@ -3510,6 +3574,18 @@
|
|||||||
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
||||||
See Documentation/blockdev/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
|
random.trust_cpu={on,off}
|
||||||
|
[KNL] Enable or disable trusting the use of the
|
||||||
|
CPU's random number generator (if available) to
|
||||||
|
fully seed the kernel's CRNG. Default is controlled
|
||||||
|
by CONFIG_RANDOM_TRUST_CPU.
|
||||||
|
|
||||||
|
random.trust_bootloader={on,off}
|
||||||
|
[KNL] Enable or disable trusting the use of a
|
||||||
|
seed passed by the bootloader (if available) to
|
||||||
|
fully seed the kernel's CRNG. Default is controlled
|
||||||
|
by CONFIG_RANDOM_TRUST_BOOTLOADER.
|
||||||
|
|
||||||
ras=option[,option,...] [KNL] RAS-specific options
|
ras=option[,option,...] [KNL] RAS-specific options
|
||||||
|
|
||||||
cec_disable [X86]
|
cec_disable [X86]
|
||||||
@@ -3948,6 +4024,18 @@
|
|||||||
|
|
||||||
retain_initrd [RAM] Keep initrd memory after extraction
|
retain_initrd [RAM] Keep initrd memory after extraction
|
||||||
|
|
||||||
|
retbleed= [X86] Control mitigation of RETBleed (Arbitrary
|
||||||
|
Speculative Code Execution with Return Instructions)
|
||||||
|
vulnerability.
|
||||||
|
|
||||||
|
off - unconditionally disable
|
||||||
|
auto - automatically select a migitation
|
||||||
|
|
||||||
|
Selecting 'auto' will choose a mitigation method at run
|
||||||
|
time according to the CPU.
|
||||||
|
|
||||||
|
Not specifying this option is equivalent to retbleed=auto.
|
||||||
|
|
||||||
rfkill.default_state=
|
rfkill.default_state=
|
||||||
0 "airplane mode". All wifi, bluetooth, wimax, gps, fm,
|
0 "airplane mode". All wifi, bluetooth, wimax, gps, fm,
|
||||||
etc. communication is blocked by default.
|
etc. communication is blocked by default.
|
||||||
@@ -4181,8 +4269,13 @@
|
|||||||
Specific mitigations can also be selected manually:
|
Specific mitigations can also be selected manually:
|
||||||
|
|
||||||
retpoline - replace indirect branches
|
retpoline - replace indirect branches
|
||||||
retpoline,generic - google's original retpoline
|
retpoline,generic - Retpolines
|
||||||
retpoline,amd - AMD-specific minimal thunk
|
retpoline,lfence - LFENCE; indirect branch
|
||||||
|
retpoline,amd - alias for retpoline,lfence
|
||||||
|
eibrs - enhanced IBRS
|
||||||
|
eibrs,retpoline - enhanced IBRS + Retpolines
|
||||||
|
eibrs,lfence - enhanced IBRS + LFENCE
|
||||||
|
ibrs - use IBRS to protect kernel
|
||||||
|
|
||||||
Not specifying this option is equivalent to
|
Not specifying this option is equivalent to
|
||||||
spectre_v2=auto.
|
spectre_v2=auto.
|
||||||
@@ -4785,6 +4878,7 @@
|
|||||||
device);
|
device);
|
||||||
j = NO_REPORT_LUNS (don't use report luns
|
j = NO_REPORT_LUNS (don't use report luns
|
||||||
command, uas only);
|
command, uas only);
|
||||||
|
k = NO_SAME (do not use WRITE_SAME, uas only)
|
||||||
l = NOT_LOCKABLE (don't try to lock and
|
l = NOT_LOCKABLE (don't try to lock and
|
||||||
unlock ejectable media, not on uas);
|
unlock ejectable media, not on uas);
|
||||||
m = MAX_SECTORS_64 (don't transfer more
|
m = MAX_SECTORS_64 (don't transfer more
|
||||||
@@ -5064,6 +5158,21 @@
|
|||||||
Disables the PV optimizations forcing the HVM guest to
|
Disables the PV optimizations forcing the HVM guest to
|
||||||
run as generic HVM guest with no PV drivers.
|
run as generic HVM guest with no PV drivers.
|
||||||
|
|
||||||
|
xen.balloon_boot_timeout= [XEN]
|
||||||
|
The time (in seconds) to wait before giving up to boot
|
||||||
|
in case initial ballooning fails to free enough memory.
|
||||||
|
Applies only when running as HVM or PVH guest and
|
||||||
|
started with less memory configured than allowed at
|
||||||
|
max. Default is 180.
|
||||||
|
|
||||||
|
xen.event_eoi_delay= [XEN]
|
||||||
|
How long to delay EOI handling in case of event
|
||||||
|
storms (jiffies). Default is 10.
|
||||||
|
|
||||||
|
xen.event_loop_timeout= [XEN]
|
||||||
|
After which time (jiffies) the event handling loop
|
||||||
|
should start to delay EOI handling. Default is 2.
|
||||||
|
|
||||||
xirc2ps_cs= [NET,PCMCIA]
|
xirc2ps_cs= [NET,PCMCIA]
|
||||||
Format:
|
Format:
|
||||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||||
|
|||||||
@@ -42,20 +42,18 @@ disclosure is from immediate (esp. if it's already publicly known)
|
|||||||
to a few weeks. As a basic default policy, we expect report date to
|
to a few weeks. As a basic default policy, we expect report date to
|
||||||
disclosure date to be on the order of 7 days.
|
disclosure date to be on the order of 7 days.
|
||||||
|
|
||||||
Coordination
|
Coordination with other groups
|
||||||
------------
|
------------------------------
|
||||||
|
|
||||||
Fixes for sensitive bugs, such as those that might lead to privilege
|
The kernel security team strongly recommends that reporters of potential
|
||||||
escalations, may need to be coordinated with the private
|
security issues NEVER contact the "linux-distros" mailing list until
|
||||||
<linux-distros@vs.openwall.org> mailing list so that distribution vendors
|
AFTER discussing it with the kernel security team. Do not Cc: both
|
||||||
are well prepared to issue a fixed kernel upon public disclosure of the
|
lists at once. You may contact the linux-distros mailing list after a
|
||||||
upstream fix. Distros will need some time to test the proposed patch and
|
fix has been agreed on and you fully understand the requirements that
|
||||||
will generally request at least a few days of embargo, and vendor update
|
doing so will impose on you and the kernel community.
|
||||||
publication prefers to happen Tuesday through Thursday. When appropriate,
|
|
||||||
the security team can assist with this coordination, or the reporter can
|
The different lists have different goals and the linux-distros rules do
|
||||||
include linux-distros from the start. In this case, remember to prefix
|
not contribute to actually fixing any potential security problems.
|
||||||
the email Subject line with "[vs]" as described in the linux-distros wiki:
|
|
||||||
<http://oss-security.openwall.org/wiki/mailing-lists/distros#how-to-use-the-lists>
|
|
||||||
|
|
||||||
CVE assignment
|
CVE assignment
|
||||||
--------------
|
--------------
|
||||||
|
|||||||
@@ -53,9 +53,12 @@ stable kernels.
|
|||||||
| ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
|
| ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
|
||||||
| ARM | Cortex-A57 | #852523 | N/A |
|
| ARM | Cortex-A57 | #852523 | N/A |
|
||||||
| ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
|
| ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
|
||||||
|
| ARM | Cortex-A57 | #1742098 | ARM64_ERRATUM_1742098 |
|
||||||
| ARM | Cortex-A72 | #853709 | N/A |
|
| ARM | Cortex-A72 | #853709 | N/A |
|
||||||
|
| ARM | Cortex-A72 | #1655431 | ARM64_ERRATUM_1742098 |
|
||||||
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
||||||
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
||||||
|
| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 |
|
||||||
| ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 |
|
| ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 |
|
||||||
| ARM | MMU-500 | #841119,#826419 | N/A |
|
| ARM | MMU-500 | #841119,#826419 | N/A |
|
||||||
| | | | |
|
| | | | |
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ finally:
|
|||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = None
|
language = 'en'
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
# non-false value, then it is used:
|
# non-false value, then it is used:
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ Setup
|
|||||||
this mode. In this case, you should build the kernel with
|
this mode. In this case, you should build the kernel with
|
||||||
CONFIG_RANDOMIZE_BASE disabled if the architecture supports KASLR.
|
CONFIG_RANDOMIZE_BASE disabled if the architecture supports KASLR.
|
||||||
|
|
||||||
|
- Build the gdb scripts (required on kernels v5.1 and above)::
|
||||||
|
|
||||||
|
make scripts_gdb
|
||||||
|
|
||||||
- Enable the gdb stub of QEMU/KVM, either
|
- Enable the gdb stub of QEMU/KVM, either
|
||||||
|
|
||||||
- at VM startup time by appending "-s" to the QEMU command line
|
- at VM startup time by appending "-s" to the QEMU command line
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ Example:
|
|||||||
Use specific request line passing from dma
|
Use specific request line passing from dma
|
||||||
For example, MMC request line is 5
|
For example, MMC request line is 5
|
||||||
|
|
||||||
sdhci: sdhci@98e00000 {
|
mmc: mmc@98e00000 {
|
||||||
compatible = "moxa,moxart-sdhci";
|
compatible = "moxa,moxart-mmc";
|
||||||
reg = <0x98e00000 0x5C>;
|
reg = <0x98e00000 0x5C>;
|
||||||
interrupts = <5 0>;
|
interrupts = <5 0>;
|
||||||
clocks = <&clk_apb>;
|
clocks = <&clk_apb>;
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ Required properties:
|
|||||||
- The second cell is reserved and is currently unused.
|
- The second cell is reserved and is currently unused.
|
||||||
- gpio-controller : Marks the device node as a GPIO controller.
|
- gpio-controller : Marks the device node as a GPIO controller.
|
||||||
- interrupt-controller: Mark the device node as an interrupt controller
|
- interrupt-controller: Mark the device node as an interrupt controller
|
||||||
- #interrupt-cells : Should be 1. The interrupt type is fixed in the hardware.
|
- #interrupt-cells : Should be 2. The interrupt type is fixed in the hardware.
|
||||||
- The first cell is the GPIO offset number within the GPIO controller.
|
- The first cell is the GPIO offset number within the GPIO controller.
|
||||||
|
- The second cell is the interrupt trigger type and level flags.
|
||||||
- interrupts: Specify the interrupt.
|
- interrupts: Specify the interrupt.
|
||||||
- altr,interrupt-type: Specifies the interrupt trigger type the GPIO
|
- altr,interrupt-type: Specifies the interrupt trigger type the GPIO
|
||||||
hardware is synthesized. This field is required if the Altera GPIO controller
|
hardware is synthesized. This field is required if the Altera GPIO controller
|
||||||
@@ -38,6 +39,6 @@ gpio_altr: gpio@0xff200000 {
|
|||||||
altr,interrupt-type = <IRQ_TYPE_EDGE_RISING>;
|
altr,interrupt-type = <IRQ_TYPE_EDGE_RISING>;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ controller state. The mux controller state is described in
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
mux: mux-controller {
|
mux: mux-controller {
|
||||||
compatible = "mux-gpio";
|
compatible = "gpio-mux";
|
||||||
#mux-control-cells = <0>;
|
#mux-control-cells = <0>;
|
||||||
|
|
||||||
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
|
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ on various other factors also like;
|
|||||||
so the device should have enough free bytes available its OOB/Spare
|
so the device should have enough free bytes available its OOB/Spare
|
||||||
area to accommodate ECC for entire page. In general following expression
|
area to accommodate ECC for entire page. In general following expression
|
||||||
helps in determining if given device can accommodate ECC syndrome:
|
helps in determining if given device can accommodate ECC syndrome:
|
||||||
"2 + (PAGESIZE / 512) * ECC_BYTES" >= OOBSIZE"
|
"2 + (PAGESIZE / 512) * ECC_BYTES" <= OOBSIZE"
|
||||||
where
|
where
|
||||||
OOBSIZE number of bytes in OOB/spare area
|
OOBSIZE number of bytes in OOB/spare area
|
||||||
PAGESIZE number of bytes in main-area of device page
|
PAGESIZE number of bytes in main-area of device page
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Following example uses irq pin number 3 of gpio0 for out of band wake-on-bt:
|
|||||||
compatible = "usb1286,204e";
|
compatible = "usb1286,204e";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
interrupt-parent = <&gpio0>;
|
interrupt-parent = <&gpio0>;
|
||||||
interrupt-name = "wakeup";
|
interrupt-names = "wakeup";
|
||||||
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Example (for ARM-based BeagleBone with NPC100 NFC controller on I2C2):
|
|||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
|
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <29 GPIO_ACTIVE_HIGH>;
|
interrupts = <29 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
enable-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
|
||||||
firmware-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
|
firmware-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Example (for ARM-based BeagleBone with PN544 on I2C2):
|
|||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <17 GPIO_ACTIVE_HIGH>;
|
interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
enable-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
|
||||||
firmware-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
firmware-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||||
|
|||||||
@@ -43,26 +43,26 @@ group emmc_nb
|
|||||||
|
|
||||||
group pwm0
|
group pwm0
|
||||||
- pin 11 (GPIO1-11)
|
- pin 11 (GPIO1-11)
|
||||||
- functions pwm, gpio
|
- functions pwm, led, gpio
|
||||||
|
|
||||||
group pwm1
|
group pwm1
|
||||||
- pin 12
|
- pin 12
|
||||||
- functions pwm, gpio
|
- functions pwm, led, gpio
|
||||||
|
|
||||||
group pwm2
|
group pwm2
|
||||||
- pin 13
|
- pin 13
|
||||||
- functions pwm, gpio
|
- functions pwm, led, gpio
|
||||||
|
|
||||||
group pwm3
|
group pwm3
|
||||||
- pin 14
|
- pin 14
|
||||||
- functions pwm, gpio
|
- functions pwm, led, gpio
|
||||||
|
|
||||||
group pmic1
|
group pmic1
|
||||||
- pin 17
|
- pin 7
|
||||||
- functions pmic, gpio
|
- functions pmic, gpio
|
||||||
|
|
||||||
group pmic0
|
group pmic0
|
||||||
- pin 16
|
- pin 6
|
||||||
- functions pmic, gpio
|
- functions pmic, gpio
|
||||||
|
|
||||||
group i2c2
|
group i2c2
|
||||||
@@ -112,17 +112,25 @@ group usb2_drvvbus1
|
|||||||
- functions drvbus, gpio
|
- functions drvbus, gpio
|
||||||
|
|
||||||
group sdio_sb
|
group sdio_sb
|
||||||
- pins 60-64
|
- pins 60-65
|
||||||
- functions sdio, gpio
|
- functions sdio, gpio
|
||||||
|
|
||||||
group rgmii
|
group rgmii
|
||||||
- pins 42-55
|
- pins 42-53
|
||||||
- functions mii, gpio
|
- functions mii, gpio
|
||||||
|
|
||||||
group pcie1
|
group pcie1
|
||||||
- pins 39-40
|
- pins 39
|
||||||
- functions pcie, gpio
|
- functions pcie, gpio
|
||||||
|
|
||||||
|
group pcie1_clkreq
|
||||||
|
- pins 40
|
||||||
|
- functions pcie, gpio
|
||||||
|
|
||||||
|
group smi
|
||||||
|
- pins 54-55
|
||||||
|
- functions smi, gpio
|
||||||
|
|
||||||
group ptp
|
group ptp
|
||||||
- pins 56-58
|
- pins 56-58
|
||||||
- functions ptp, gpio
|
- functions ptp, gpio
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ common regulator binding documented in:
|
|||||||
|
|
||||||
|
|
||||||
Required properties of the main device node (the parent!):
|
Required properties of the main device node (the parent!):
|
||||||
|
- s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
|
||||||
|
for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
|
||||||
|
|
||||||
|
[1] If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
|
||||||
|
property is specified, then all the eight voltage values for the
|
||||||
|
's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
|
||||||
|
|
||||||
|
Optional properties of the main device node (the parent!):
|
||||||
- s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV)
|
- s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV)
|
||||||
units for buck2 when changing voltage using gpio dvs. Refer to [1] below
|
units for buck2 when changing voltage using gpio dvs. Refer to [1] below
|
||||||
for additional information.
|
for additional information.
|
||||||
@@ -25,26 +33,13 @@ Required properties of the main device node (the parent!):
|
|||||||
units for buck4 when changing voltage using gpio dvs. Refer to [1] below
|
units for buck4 when changing voltage using gpio dvs. Refer to [1] below
|
||||||
for additional information.
|
for additional information.
|
||||||
|
|
||||||
- s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
|
|
||||||
for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
|
|
||||||
|
|
||||||
[1] If none of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
|
|
||||||
property is specified, the 's5m8767,pmic-buck[2/3/4]-dvs-voltage'
|
|
||||||
property should specify atleast one voltage level (which would be a
|
|
||||||
safe operating voltage).
|
|
||||||
|
|
||||||
If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
|
|
||||||
property is specified, then all the eight voltage values for the
|
|
||||||
's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
|
|
||||||
|
|
||||||
Optional properties of the main device node (the parent!):
|
|
||||||
- s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs.
|
- s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs.
|
||||||
- s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs.
|
- s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs.
|
||||||
- s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs.
|
- s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs.
|
||||||
|
|
||||||
Additional properties required if either of the optional properties are used:
|
Additional properties required if either of the optional properties are used:
|
||||||
|
|
||||||
- s5m8767,pmic-buck234-default-dvs-idx: Default voltage setting selected from
|
- s5m8767,pmic-buck-default-dvs-idx: Default voltage setting selected from
|
||||||
the possible 8 options selectable by the dvs gpios. The value of this
|
the possible 8 options selectable by the dvs gpios. The value of this
|
||||||
property should be between 0 and 7. If not specified or if out of range, the
|
property should be between 0 and 7. If not specified or if out of range, the
|
||||||
default value of this property is set to 0.
|
default value of this property is set to 0.
|
||||||
|
|||||||
@@ -14,9 +14,15 @@ Required properties:
|
|||||||
- #gpio-cells : Must be 2. The first cell is the pin number and the
|
- #gpio-cells : Must be 2. The first cell is the pin number and the
|
||||||
second cell is used to specify optional parameters (currently unused).
|
second cell is used to specify optional parameters (currently unused).
|
||||||
|
|
||||||
- AVDD2-supply, DBVDD1-supply, DBVDD2-supply, DBVDD3-supply, CPVDD-supply,
|
- power supplies for the device, as covered in
|
||||||
SPKVDD1-supply, SPKVDD2-supply : power supplies for the device, as covered
|
Documentation/devicetree/bindings/regulator/regulator.txt, depending
|
||||||
in Documentation/devicetree/bindings/regulator/regulator.txt
|
on compatible:
|
||||||
|
- for wlf,wm1811 and wlf,wm8958:
|
||||||
|
AVDD1-supply, AVDD2-supply, DBVDD1-supply, DBVDD2-supply, DBVDD3-supply,
|
||||||
|
DCVDD-supply, CPVDD-supply, SPKVDD1-supply, SPKVDD2-supply
|
||||||
|
- for wlf,wm8994:
|
||||||
|
AVDD1-supply, AVDD2-supply, DBVDD-supply, DCVDD-supply, CPVDD-supply,
|
||||||
|
SPKVDD1-supply, SPKVDD2-supply
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
|
||||||
@@ -68,11 +74,11 @@ codec: wm8994@1a {
|
|||||||
|
|
||||||
lineout1-se;
|
lineout1-se;
|
||||||
|
|
||||||
|
AVDD1-supply = <®ulator>;
|
||||||
AVDD2-supply = <®ulator>;
|
AVDD2-supply = <®ulator>;
|
||||||
CPVDD-supply = <®ulator>;
|
CPVDD-supply = <®ulator>;
|
||||||
DBVDD1-supply = <®ulator>;
|
DBVDD-supply = <®ulator>;
|
||||||
DBVDD2-supply = <®ulator>;
|
DCVDD-supply = <®ulator>;
|
||||||
DBVDD3-supply = <®ulator>;
|
|
||||||
SPKVDD1-supply = <®ulator>;
|
SPKVDD1-supply = <®ulator>;
|
||||||
SPKVDD2-supply = <®ulator>;
|
SPKVDD2-supply = <®ulator>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ High-level taskfile hooks
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
void (*qc_prep) (struct ata_queued_cmd *qc);
|
enum ata_completion_errors (*qc_prep) (struct ata_queued_cmd *qc);
|
||||||
int (*qc_issue) (struct ata_queued_cmd *qc);
|
int (*qc_issue) (struct ata_queued_cmd *qc);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ hardware, which may be as simple as a set of GPIO pins or as complex as
|
|||||||
a pair of FIFOs connected to dual DMA engines on the other side of the
|
a pair of FIFOs connected to dual DMA engines on the other side of the
|
||||||
SPI shift register (maximizing throughput). Such drivers bridge between
|
SPI shift register (maximizing throughput). Such drivers bridge between
|
||||||
whatever bus they sit on (often the platform bus) and SPI, and expose
|
whatever bus they sit on (often the platform bus) and SPI, and expose
|
||||||
the SPI side of their device as a :c:type:`struct spi_master
|
the SPI side of their device as a :c:type:`struct spi_controller
|
||||||
<spi_master>`. SPI devices are children of that master,
|
<spi_controller>`. SPI devices are children of that master,
|
||||||
represented as a :c:type:`struct spi_device <spi_device>` and
|
represented as a :c:type:`struct spi_device <spi_device>` and
|
||||||
manufactured from :c:type:`struct spi_board_info
|
manufactured from :c:type:`struct spi_board_info
|
||||||
<spi_board_info>` descriptors which are usually provided by
|
<spi_board_info>` descriptors which are usually provided by
|
||||||
|
|||||||
@@ -93,13 +93,15 @@ The Amiga protection flags RWEDRWEDHSPARWED are handled as follows:
|
|||||||
|
|
||||||
- R maps to r for user, group and others. On directories, R implies x.
|
- R maps to r for user, group and others. On directories, R implies x.
|
||||||
|
|
||||||
- If both W and D are allowed, w will be set.
|
- W maps to w.
|
||||||
|
|
||||||
- E maps to x.
|
- E maps to x.
|
||||||
|
|
||||||
- H and P are always retained and ignored under Linux.
|
- D is ignored.
|
||||||
|
|
||||||
- A is always reset when a file is written to.
|
- H, S and P are always retained and ignored under Linux.
|
||||||
|
|
||||||
|
- A is cleared when a file is written to.
|
||||||
|
|
||||||
User id and group id will be used unless set[gu]id are given as mount
|
User id and group id will be used unless set[gu]id are given as mount
|
||||||
options. Since most of the Amiga file systems are single user systems
|
options. Since most of the Amiga file systems are single user systems
|
||||||
@@ -111,11 +113,13 @@ Linux -> Amiga:
|
|||||||
|
|
||||||
The Linux rwxrwxrwx file mode is handled as follows:
|
The Linux rwxrwxrwx file mode is handled as follows:
|
||||||
|
|
||||||
- r permission will set R for user, group and others.
|
- r permission will allow R for user, group and others.
|
||||||
|
|
||||||
- w permission will set W and D for user, group and others.
|
- w permission will allow W for user, group and others.
|
||||||
|
|
||||||
- x permission of the user will set E for plain files.
|
- x permission of the user will allow E for plain files.
|
||||||
|
|
||||||
|
- D will be allowed for user, group and others.
|
||||||
|
|
||||||
- All other flags (suid, sgid, ...) are ignored and will
|
- All other flags (suid, sgid, ...) are ignored and will
|
||||||
not be retained.
|
not be retained.
|
||||||
|
|||||||
453
Documentation/filesystems/ext4/ondisk/directory.rst
Normal file
453
Documentation/filesystems/ext4/ondisk/directory.rst
Normal file
@@ -0,0 +1,453 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
Directory Entries
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
In an ext4 filesystem, a directory is more or less a flat file that maps
|
||||||
|
an arbitrary byte string (usually ASCII) to an inode number on the
|
||||||
|
filesystem. There can be many directory entries across the filesystem
|
||||||
|
that reference the same inode number--these are known as hard links, and
|
||||||
|
that is why hard links cannot reference files on other filesystems. As
|
||||||
|
such, directory entries are found by reading the data block(s)
|
||||||
|
associated with a directory file for the particular directory entry that
|
||||||
|
is desired.
|
||||||
|
|
||||||
|
Linear (Classic) Directories
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
By default, each directory lists its entries in an “almost-linear”
|
||||||
|
array. I write “almost” because it's not a linear array in the memory
|
||||||
|
sense because directory entries are not split across filesystem blocks.
|
||||||
|
Therefore, it is more accurate to say that a directory is a series of
|
||||||
|
data blocks and that each block contains a linear array of directory
|
||||||
|
entries. The end of each per-block array is signified by reaching the
|
||||||
|
end of the block; the last entry in the block has a record length that
|
||||||
|
takes it all the way to the end of the block. The end of the entire
|
||||||
|
directory is of course signified by reaching the end of the file. Unused
|
||||||
|
directory entries are signified by inode = 0. By default the filesystem
|
||||||
|
uses ``struct ext4_dir_entry_2`` for directory entries unless the
|
||||||
|
“filetype” feature flag is not set, in which case it uses
|
||||||
|
``struct ext4_dir_entry``.
|
||||||
|
|
||||||
|
The original directory entry format is ``struct ext4_dir_entry``, which
|
||||||
|
is at most 263 bytes long, though on disk you'll need to reference
|
||||||
|
``dirent.rec_len`` to know for sure.
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Size
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- inode
|
||||||
|
- Number of the inode that this directory entry points to.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le16
|
||||||
|
- rec\_len
|
||||||
|
- Length of this directory entry. Must be a multiple of 4.
|
||||||
|
* - 0x6
|
||||||
|
- \_\_le16
|
||||||
|
- name\_len
|
||||||
|
- Length of the file name.
|
||||||
|
* - 0x8
|
||||||
|
- char
|
||||||
|
- name[EXT4\_NAME\_LEN]
|
||||||
|
- File name.
|
||||||
|
|
||||||
|
Since file names cannot be longer than 255 bytes, the new directory
|
||||||
|
entry format shortens the rec\_len field and uses the space for a file
|
||||||
|
type flag, probably to avoid having to load every inode during directory
|
||||||
|
tree traversal. This format is ``ext4_dir_entry_2``, which is at most
|
||||||
|
263 bytes long, though on disk you'll need to reference
|
||||||
|
``dirent.rec_len`` to know for sure.
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Size
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- inode
|
||||||
|
- Number of the inode that this directory entry points to.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le16
|
||||||
|
- rec\_len
|
||||||
|
- Length of this directory entry.
|
||||||
|
* - 0x6
|
||||||
|
- \_\_u8
|
||||||
|
- name\_len
|
||||||
|
- Length of the file name.
|
||||||
|
* - 0x7
|
||||||
|
- \_\_u8
|
||||||
|
- file\_type
|
||||||
|
- File type code, see ftype_ table below.
|
||||||
|
* - 0x8
|
||||||
|
- char
|
||||||
|
- name[EXT4\_NAME\_LEN]
|
||||||
|
- File name.
|
||||||
|
|
||||||
|
.. _ftype:
|
||||||
|
|
||||||
|
The directory file type is one of the following values:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 79
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Value
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- Unknown.
|
||||||
|
* - 0x1
|
||||||
|
- Regular file.
|
||||||
|
* - 0x2
|
||||||
|
- Directory.
|
||||||
|
* - 0x3
|
||||||
|
- Character device file.
|
||||||
|
* - 0x4
|
||||||
|
- Block device file.
|
||||||
|
* - 0x5
|
||||||
|
- FIFO.
|
||||||
|
* - 0x6
|
||||||
|
- Socket.
|
||||||
|
* - 0x7
|
||||||
|
- Symbolic link.
|
||||||
|
|
||||||
|
To support directories that are both encrypted and casefolded directories, we
|
||||||
|
must also include hash information in the directory entry. We append
|
||||||
|
``ext4_extended_dir_entry_2`` to ``ext4_dir_entry_2`` except for the entries
|
||||||
|
for dot and dotdot, which are kept the same. The structure follows immediately
|
||||||
|
after ``name`` and is included in the size listed by ``rec_len`` If a directory
|
||||||
|
entry uses this extension, it may be up to 271 bytes.
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 8 8 24 40
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Size
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- hash
|
||||||
|
- The hash of the directory name
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le32
|
||||||
|
- minor\_hash
|
||||||
|
- The minor hash of the directory name
|
||||||
|
|
||||||
|
|
||||||
|
In order to add checksums to these classic directory blocks, a phony
|
||||||
|
``struct ext4_dir_entry`` is placed at the end of each leaf block to
|
||||||
|
hold the checksum. The directory entry is 12 bytes long. The inode
|
||||||
|
number and name\_len fields are set to zero to fool old software into
|
||||||
|
ignoring an apparently empty directory entry, and the checksum is stored
|
||||||
|
in the place where the name normally goes. The structure is
|
||||||
|
``struct ext4_dir_entry_tail``:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Size
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- det\_reserved\_zero1
|
||||||
|
- Inode number, which must be zero.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le16
|
||||||
|
- det\_rec\_len
|
||||||
|
- Length of this directory entry, which must be 12.
|
||||||
|
* - 0x6
|
||||||
|
- \_\_u8
|
||||||
|
- det\_reserved\_zero2
|
||||||
|
- Length of the file name, which must be zero.
|
||||||
|
* - 0x7
|
||||||
|
- \_\_u8
|
||||||
|
- det\_reserved\_ft
|
||||||
|
- File type, which must be 0xDE.
|
||||||
|
* - 0x8
|
||||||
|
- \_\_le32
|
||||||
|
- det\_checksum
|
||||||
|
- Directory leaf block checksum.
|
||||||
|
|
||||||
|
The leaf directory block checksum is calculated against the FS UUID, the
|
||||||
|
directory's inode number, the directory's inode generation number, and
|
||||||
|
the entire directory entry block up to (but not including) the fake
|
||||||
|
directory entry.
|
||||||
|
|
||||||
|
Hash Tree Directories
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A linear array of directory entries isn't great for performance, so a
|
||||||
|
new feature was added to ext3 to provide a faster (but peculiar)
|
||||||
|
balanced tree keyed off a hash of the directory entry name. If the
|
||||||
|
EXT4\_INDEX\_FL (0x1000) flag is set in the inode, this directory uses a
|
||||||
|
hashed btree (htree) to organize and find directory entries. For
|
||||||
|
backwards read-only compatibility with ext2, this tree is actually
|
||||||
|
hidden inside the directory file, masquerading as “empty” directory data
|
||||||
|
blocks! It was stated previously that the end of the linear directory
|
||||||
|
entry table was signified with an entry pointing to inode 0; this is
|
||||||
|
(ab)used to fool the old linear-scan algorithm into thinking that the
|
||||||
|
rest of the directory block is empty so that it moves on.
|
||||||
|
|
||||||
|
The root of the tree always lives in the first data block of the
|
||||||
|
directory. By ext2 custom, the '.' and '..' entries must appear at the
|
||||||
|
beginning of this first block, so they are put here as two
|
||||||
|
``struct ext4_dir_entry_2``\ s and not stored in the tree. The rest of
|
||||||
|
the root node contains metadata about the tree and finally a hash->block
|
||||||
|
map to find nodes that are lower in the htree. If
|
||||||
|
``dx_root.info.indirect_levels`` is non-zero then the htree has two
|
||||||
|
levels; the data block pointed to by the root node's map is an interior
|
||||||
|
node, which is indexed by a minor hash. Interior nodes in this tree
|
||||||
|
contains a zeroed out ``struct ext4_dir_entry_2`` followed by a
|
||||||
|
minor\_hash->block map to find leafe nodes. Leaf nodes contain a linear
|
||||||
|
array of all ``struct ext4_dir_entry_2``; all of these entries
|
||||||
|
(presumably) hash to the same value. If there is an overflow, the
|
||||||
|
entries simply overflow into the next leaf node, and the
|
||||||
|
least-significant bit of the hash (in the interior node map) that gets
|
||||||
|
us to this next leaf node is set.
|
||||||
|
|
||||||
|
To traverse the directory as a htree, the code calculates the hash of
|
||||||
|
the desired file name and uses it to find the corresponding block
|
||||||
|
number. If the tree is flat, the block is a linear array of directory
|
||||||
|
entries that can be searched; otherwise, the minor hash of the file name
|
||||||
|
is computed and used against this second block to find the corresponding
|
||||||
|
third block number. That third block number will be a linear array of
|
||||||
|
directory entries.
|
||||||
|
|
||||||
|
To traverse the directory as a linear array (such as the old code does),
|
||||||
|
the code simply reads every data block in the directory. The blocks used
|
||||||
|
for the htree will appear to have no entries (aside from '.' and '..')
|
||||||
|
and so only the leaf nodes will appear to have any interesting content.
|
||||||
|
|
||||||
|
The root of the htree is in ``struct dx_root``, which is the full length
|
||||||
|
of a data block:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Type
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- dot.inode
|
||||||
|
- inode number of this directory.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le16
|
||||||
|
- dot.rec\_len
|
||||||
|
- Length of this record, 12.
|
||||||
|
* - 0x6
|
||||||
|
- u8
|
||||||
|
- dot.name\_len
|
||||||
|
- Length of the name, 1.
|
||||||
|
* - 0x7
|
||||||
|
- u8
|
||||||
|
- dot.file\_type
|
||||||
|
- File type of this entry, 0x2 (directory) (if the feature flag is set).
|
||||||
|
* - 0x8
|
||||||
|
- char
|
||||||
|
- dot.name[4]
|
||||||
|
- “.\\0\\0\\0”
|
||||||
|
* - 0xC
|
||||||
|
- \_\_le32
|
||||||
|
- dotdot.inode
|
||||||
|
- inode number of parent directory.
|
||||||
|
* - 0x10
|
||||||
|
- \_\_le16
|
||||||
|
- dotdot.rec\_len
|
||||||
|
- block\_size - 12. The record length is long enough to cover all htree
|
||||||
|
data.
|
||||||
|
* - 0x12
|
||||||
|
- u8
|
||||||
|
- dotdot.name\_len
|
||||||
|
- Length of the name, 2.
|
||||||
|
* - 0x13
|
||||||
|
- u8
|
||||||
|
- dotdot.file\_type
|
||||||
|
- File type of this entry, 0x2 (directory) (if the feature flag is set).
|
||||||
|
* - 0x14
|
||||||
|
- char
|
||||||
|
- dotdot\_name[4]
|
||||||
|
- “..\\0\\0”
|
||||||
|
* - 0x18
|
||||||
|
- \_\_le32
|
||||||
|
- struct dx\_root\_info.reserved\_zero
|
||||||
|
- Zero.
|
||||||
|
* - 0x1C
|
||||||
|
- u8
|
||||||
|
- struct dx\_root\_info.hash\_version
|
||||||
|
- Hash type, see dirhash_ table below.
|
||||||
|
* - 0x1D
|
||||||
|
- u8
|
||||||
|
- struct dx\_root\_info.info\_length
|
||||||
|
- Length of the tree information, 0x8.
|
||||||
|
* - 0x1E
|
||||||
|
- u8
|
||||||
|
- struct dx\_root\_info.indirect\_levels
|
||||||
|
- Depth of the htree. Cannot be larger than 3 if the INCOMPAT\_LARGEDIR
|
||||||
|
feature is set; cannot be larger than 2 otherwise.
|
||||||
|
* - 0x1F
|
||||||
|
- u8
|
||||||
|
- struct dx\_root\_info.unused\_flags
|
||||||
|
-
|
||||||
|
* - 0x20
|
||||||
|
- \_\_le16
|
||||||
|
- limit
|
||||||
|
- Maximum number of dx\_entries that can follow this header, plus 1 for
|
||||||
|
the header itself.
|
||||||
|
* - 0x22
|
||||||
|
- \_\_le16
|
||||||
|
- count
|
||||||
|
- Actual number of dx\_entries that follow this header, plus 1 for the
|
||||||
|
header itself.
|
||||||
|
* - 0x24
|
||||||
|
- \_\_le32
|
||||||
|
- block
|
||||||
|
- The block number (within the directory file) that goes with hash=0.
|
||||||
|
* - 0x28
|
||||||
|
- struct dx\_entry
|
||||||
|
- entries[0]
|
||||||
|
- As many 8-byte ``struct dx_entry`` as fits in the rest of the data block.
|
||||||
|
|
||||||
|
.. _dirhash:
|
||||||
|
|
||||||
|
The directory hash is one of the following values:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 79
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Value
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- Legacy.
|
||||||
|
* - 0x1
|
||||||
|
- Half MD4.
|
||||||
|
* - 0x2
|
||||||
|
- Tea.
|
||||||
|
* - 0x3
|
||||||
|
- Legacy, unsigned.
|
||||||
|
* - 0x4
|
||||||
|
- Half MD4, unsigned.
|
||||||
|
* - 0x5
|
||||||
|
- Tea, unsigned.
|
||||||
|
* - 0x6
|
||||||
|
- Siphash.
|
||||||
|
|
||||||
|
Interior nodes of an htree are recorded as ``struct dx_node``, which is
|
||||||
|
also the full length of a data block:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Type
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- fake.inode
|
||||||
|
- Zero, to make it look like this entry is not in use.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le16
|
||||||
|
- fake.rec\_len
|
||||||
|
- The size of the block, in order to hide all of the dx\_node data.
|
||||||
|
* - 0x6
|
||||||
|
- u8
|
||||||
|
- name\_len
|
||||||
|
- Zero. There is no name for this “unused” directory entry.
|
||||||
|
* - 0x7
|
||||||
|
- u8
|
||||||
|
- file\_type
|
||||||
|
- Zero. There is no file type for this “unused” directory entry.
|
||||||
|
* - 0x8
|
||||||
|
- \_\_le16
|
||||||
|
- limit
|
||||||
|
- Maximum number of dx\_entries that can follow this header, plus 1 for
|
||||||
|
the header itself.
|
||||||
|
* - 0xA
|
||||||
|
- \_\_le16
|
||||||
|
- count
|
||||||
|
- Actual number of dx\_entries that follow this header, plus 1 for the
|
||||||
|
header itself.
|
||||||
|
* - 0xE
|
||||||
|
- \_\_le32
|
||||||
|
- block
|
||||||
|
- The block number (within the directory file) that goes with the lowest
|
||||||
|
hash value of this block. This value is stored in the parent block.
|
||||||
|
* - 0x12
|
||||||
|
- struct dx\_entry
|
||||||
|
- entries[0]
|
||||||
|
- As many 8-byte ``struct dx_entry`` as fits in the rest of the data block.
|
||||||
|
|
||||||
|
The hash maps that exist in both ``struct dx_root`` and
|
||||||
|
``struct dx_node`` are recorded as ``struct dx_entry``, which is 8 bytes
|
||||||
|
long:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Type
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- \_\_le32
|
||||||
|
- hash
|
||||||
|
- Hash code.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le32
|
||||||
|
- block
|
||||||
|
- Block number (within the directory file, not filesystem blocks) of the
|
||||||
|
next node in the htree.
|
||||||
|
|
||||||
|
(If you think this is all quite clever and peculiar, so does the
|
||||||
|
author.)
|
||||||
|
|
||||||
|
If metadata checksums are enabled, the last 8 bytes of the directory
|
||||||
|
block (precisely the length of one dx\_entry) are used to store a
|
||||||
|
``struct dx_tail``, which contains the checksum. The ``limit`` and
|
||||||
|
``count`` entries in the dx\_root/dx\_node structures are adjusted as
|
||||||
|
necessary to fit the dx\_tail into the block. If there is no space for
|
||||||
|
the dx\_tail, the user is notified to run e2fsck -D to rebuild the
|
||||||
|
directory index (which will ensure that there's space for the checksum.
|
||||||
|
The dx\_tail structure is 8 bytes long and looks like this:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 1 1 1 77
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Offset
|
||||||
|
- Type
|
||||||
|
- Name
|
||||||
|
- Description
|
||||||
|
* - 0x0
|
||||||
|
- u32
|
||||||
|
- dt\_reserved
|
||||||
|
- Zero.
|
||||||
|
* - 0x4
|
||||||
|
- \_\_le32
|
||||||
|
- dt\_checksum
|
||||||
|
- Checksum of the htree directory block.
|
||||||
|
|
||||||
|
The checksum is calculated against the FS UUID, the htree index header
|
||||||
|
(dx\_root or dx\_node), all of the htree indices (dx\_entry) that are in
|
||||||
|
use, and the tail block (dx\_tail).
|
||||||
@@ -169,3 +169,13 @@ havoc if they lock crucial files. The way around it is to change the file
|
|||||||
permissions (remove the setgid bit) before trying to read or write to it.
|
permissions (remove the setgid bit) before trying to read or write to it.
|
||||||
Of course, that might be a bit tricky if the system is hung :-(
|
Of course, that might be a bit tricky if the system is hung :-(
|
||||||
|
|
||||||
|
7. The "mand" mount option
|
||||||
|
--------------------------
|
||||||
|
Mandatory locking is disabled on all filesystems by default, and must be
|
||||||
|
administratively enabled by mounting with "-o mand". That mount option
|
||||||
|
is only allowed if the mounting task has the CAP_SYS_ADMIN capability.
|
||||||
|
|
||||||
|
Since kernel v4.5, it is possible to disable mandatory locking
|
||||||
|
altogether by setting CONFIG_MANDATORY_FILE_LOCKING to "n". A kernel
|
||||||
|
with this disabled will reject attempts to mount filesystems with the
|
||||||
|
"mand" mount option with the error status EPERM.
|
||||||
|
|||||||
@@ -211,12 +211,10 @@ Other notes:
|
|||||||
is 4096.
|
is 4096.
|
||||||
|
|
||||||
- show() methods should return the number of bytes printed into the
|
- show() methods should return the number of bytes printed into the
|
||||||
buffer. This is the return value of scnprintf().
|
buffer.
|
||||||
|
|
||||||
- show() must not use snprintf() when formatting the value to be
|
- show() should only use sysfs_emit() or sysfs_emit_at() when formatting
|
||||||
returned to user space. If you can guarantee that an overflow
|
the value to be returned to user space.
|
||||||
will never happen you can use sprintf() otherwise you must use
|
|
||||||
scnprintf().
|
|
||||||
|
|
||||||
- store() should return the number of bytes used from the buffer. If the
|
- store() should return the number of bytes used from the buffer. If the
|
||||||
entire buffer has been used, just return the count argument.
|
entire buffer has been used, just return the count argument.
|
||||||
|
|||||||
@@ -290,7 +290,6 @@ Code Seq#(hex) Include File Comments
|
|||||||
0x89 00-06 arch/x86/include/asm/sockios.h
|
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||||
0x89 0B-DF linux/sockios.h
|
0x89 0B-DF linux/sockios.h
|
||||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||||
0x89 E0-EF linux/dn.h PROTOPRIVATE range
|
|
||||||
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
||||||
0x8B all linux/wireless.h
|
0x8B all linux/wireless.h
|
||||||
0x8C 00-3F WiNRADiO driver
|
0x8C 00-3F WiNRADiO driver
|
||||||
|
|||||||
@@ -29,8 +29,7 @@ whole range, 0-255, dividing the angular value by 1.41. The enum
|
|||||||
:c:type:`v4l2_hsv_encoding` specifies which encoding is used.
|
:c:type:`v4l2_hsv_encoding` specifies which encoding is used.
|
||||||
|
|
||||||
.. note:: The default R'G'B' quantization is full range for all
|
.. note:: The default R'G'B' quantization is full range for all
|
||||||
colorspaces except for BT.2020 which uses limited range R'G'B'
|
colorspaces. HSV formats are always full range.
|
||||||
quantization.
|
|
||||||
|
|
||||||
.. tabularcolumns:: |p{6.0cm}|p{11.5cm}|
|
.. tabularcolumns:: |p{6.0cm}|p{11.5cm}|
|
||||||
|
|
||||||
@@ -162,8 +161,8 @@ whole range, 0-255, dividing the angular value by 1.41. The enum
|
|||||||
- Details
|
- Details
|
||||||
* - ``V4L2_QUANTIZATION_DEFAULT``
|
* - ``V4L2_QUANTIZATION_DEFAULT``
|
||||||
- Use the default quantization encoding as defined by the
|
- Use the default quantization encoding as defined by the
|
||||||
colorspace. This is always full range for R'G'B' (except for the
|
colorspace. This is always full range for R'G'B' and HSV.
|
||||||
BT.2020 colorspace) and HSV. It is usually limited range for Y'CbCr.
|
It is usually limited range for Y'CbCr.
|
||||||
* - ``V4L2_QUANTIZATION_FULL_RANGE``
|
* - ``V4L2_QUANTIZATION_FULL_RANGE``
|
||||||
- Use the full range quantization encoding. I.e. the range [0…1] is
|
- Use the full range quantization encoding. I.e. the range [0…1] is
|
||||||
mapped to [0…255] (with possible clipping to [1…254] to avoid the
|
mapped to [0…255] (with possible clipping to [1…254] to avoid the
|
||||||
@@ -173,4 +172,4 @@ whole range, 0-255, dividing the angular value by 1.41. The enum
|
|||||||
* - ``V4L2_QUANTIZATION_LIM_RANGE``
|
* - ``V4L2_QUANTIZATION_LIM_RANGE``
|
||||||
- Use the limited range quantization encoding. I.e. the range [0…1]
|
- Use the limited range quantization encoding. I.e. the range [0…1]
|
||||||
is mapped to [16…235]. Cb and Cr are mapped from [-0.5…0.5] to
|
is mapped to [16…235]. Cb and Cr are mapped from [-0.5…0.5] to
|
||||||
[16…240].
|
[16…240]. Limited Range cannot be used with HSV.
|
||||||
|
|||||||
@@ -370,9 +370,8 @@ Colorspace BT.2020 (V4L2_COLORSPACE_BT2020)
|
|||||||
The :ref:`itu2020` standard defines the colorspace used by Ultra-high
|
The :ref:`itu2020` standard defines the colorspace used by Ultra-high
|
||||||
definition television (UHDTV). The default transfer function is
|
definition television (UHDTV). The default transfer function is
|
||||||
``V4L2_XFER_FUNC_709``. The default Y'CbCr encoding is
|
``V4L2_XFER_FUNC_709``. The default Y'CbCr encoding is
|
||||||
``V4L2_YCBCR_ENC_BT2020``. The default R'G'B' quantization is limited
|
``V4L2_YCBCR_ENC_BT2020``. The default Y'CbCr quantization is limited range.
|
||||||
range (!), and so is the default Y'CbCr quantization. The chromaticities
|
The chromaticities of the primary colors and the white reference are:
|
||||||
of the primary colors and the white reference are:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -191,11 +191,12 @@ ad_actor_sys_prio
|
|||||||
ad_actor_system
|
ad_actor_system
|
||||||
|
|
||||||
In an AD system, this specifies the mac-address for the actor in
|
In an AD system, this specifies the mac-address for the actor in
|
||||||
protocol packet exchanges (LACPDUs). The value cannot be NULL or
|
protocol packet exchanges (LACPDUs). The value cannot be a multicast
|
||||||
multicast. It is preferred to have the local-admin bit set for this
|
address. If the all-zeroes MAC is specified, bonding will internally
|
||||||
mac but driver does not enforce it. If the value is not given then
|
use the MAC of the bond itself. It is preferred to have the
|
||||||
system defaults to using the masters' mac address as actors' system
|
local-admin bit set for this mac but driver does not enforce it. If
|
||||||
address.
|
the value is not given then system defaults to using the masters'
|
||||||
|
mac address as actors' system address.
|
||||||
|
|
||||||
This parameter has effect only in 802.3ad mode and is available through
|
This parameter has effect only in 802.3ad mode and is available through
|
||||||
SysFs interface.
|
SysFs interface.
|
||||||
|
|||||||
@@ -1,232 +0,0 @@
|
|||||||
Linux DECnet Networking Layer Information
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
1) Other documentation....
|
|
||||||
|
|
||||||
o Project Home Pages
|
|
||||||
http://www.chygwyn.com/ - Kernel info
|
|
||||||
http://linux-decnet.sourceforge.net/ - Userland tools
|
|
||||||
http://www.sourceforge.net/projects/linux-decnet/ - Status page
|
|
||||||
|
|
||||||
2) Configuring the kernel
|
|
||||||
|
|
||||||
Be sure to turn on the following options:
|
|
||||||
|
|
||||||
CONFIG_DECNET (obviously)
|
|
||||||
CONFIG_PROC_FS (to see what's going on)
|
|
||||||
CONFIG_SYSCTL (for easy configuration)
|
|
||||||
|
|
||||||
if you want to try out router support (not properly debugged yet)
|
|
||||||
you'll need the following options as well...
|
|
||||||
|
|
||||||
CONFIG_DECNET_ROUTER (to be able to add/delete routes)
|
|
||||||
CONFIG_NETFILTER (will be required for the DECnet routing daemon)
|
|
||||||
|
|
||||||
CONFIG_DECNET_ROUTE_FWMARK is optional
|
|
||||||
|
|
||||||
Don't turn on SIOCGIFCONF support for DECnet unless you are really sure
|
|
||||||
that you need it, in general you won't and it can cause ifconfig to
|
|
||||||
malfunction.
|
|
||||||
|
|
||||||
Run time configuration has changed slightly from the 2.4 system. If you
|
|
||||||
want to configure an endnode, then the simplified procedure is as follows:
|
|
||||||
|
|
||||||
o Set the MAC address on your ethernet card before starting _any_ other
|
|
||||||
network protocols.
|
|
||||||
|
|
||||||
As soon as your network card is brought into the UP state, DECnet should
|
|
||||||
start working. If you need something more complicated or are unsure how
|
|
||||||
to set the MAC address, see the next section. Also all configurations which
|
|
||||||
worked with 2.4 will work under 2.5 with no change.
|
|
||||||
|
|
||||||
3) Command line options
|
|
||||||
|
|
||||||
You can set a DECnet address on the kernel command line for compatibility
|
|
||||||
with the 2.4 configuration procedure, but in general it's not needed any more.
|
|
||||||
If you do st a DECnet address on the command line, it has only one purpose
|
|
||||||
which is that its added to the addresses on the loopback device.
|
|
||||||
|
|
||||||
With 2.4 kernels, DECnet would only recognise addresses as local if they
|
|
||||||
were added to the loopback device. In 2.5, any local interface address
|
|
||||||
can be used to loop back to the local machine. Of course this does not
|
|
||||||
prevent you adding further addresses to the loopback device if you
|
|
||||||
want to.
|
|
||||||
|
|
||||||
N.B. Since the address list of an interface determines the addresses for
|
|
||||||
which "hello" messages are sent, if you don't set an address on the loopback
|
|
||||||
interface then you won't see any entries in /proc/net/neigh for the local
|
|
||||||
host until such time as you start a connection. This doesn't affect the
|
|
||||||
operation of the local communications in any other way though.
|
|
||||||
|
|
||||||
The kernel command line takes options looking like the following:
|
|
||||||
|
|
||||||
decnet.addr=1,2
|
|
||||||
|
|
||||||
the two numbers are the node address 1,2 = 1.2 For 2.2.xx kernels
|
|
||||||
and early 2.3.xx kernels, you must use a comma when specifying the
|
|
||||||
DECnet address like this. For more recent 2.3.xx kernels, you may
|
|
||||||
use almost any character except space, although a `.` would be the most
|
|
||||||
obvious choice :-)
|
|
||||||
|
|
||||||
There used to be a third number specifying the node type. This option
|
|
||||||
has gone away in favour of a per interface node type. This is now set
|
|
||||||
using /proc/sys/net/decnet/conf/<dev>/forwarding. This file can be
|
|
||||||
set with a single digit, 0=EndNode, 1=L1 Router and 2=L2 Router.
|
|
||||||
|
|
||||||
There are also equivalent options for modules. The node address can
|
|
||||||
also be set through the /proc/sys/net/decnet/ files, as can other system
|
|
||||||
parameters.
|
|
||||||
|
|
||||||
Currently the only supported devices are ethernet and ip_gre. The
|
|
||||||
ethernet address of your ethernet card has to be set according to the DECnet
|
|
||||||
address of the node in order for it to be autoconfigured (and then appear in
|
|
||||||
/proc/net/decnet_dev). There is a utility available at the above
|
|
||||||
FTP sites called dn2ethaddr which can compute the correct ethernet
|
|
||||||
address to use. The address can be set by ifconfig either before or
|
|
||||||
at the time the device is brought up. If you are using RedHat you can
|
|
||||||
add the line:
|
|
||||||
|
|
||||||
MACADDR=AA:00:04:00:03:04
|
|
||||||
|
|
||||||
or something similar, to /etc/sysconfig/network-scripts/ifcfg-eth0 or
|
|
||||||
wherever your network card's configuration lives. Setting the MAC address
|
|
||||||
of your ethernet card to an address starting with "hi-ord" will cause a
|
|
||||||
DECnet address which matches to be added to the interface (which you can
|
|
||||||
verify with iproute2).
|
|
||||||
|
|
||||||
The default device for routing can be set through the /proc filesystem
|
|
||||||
by setting /proc/sys/net/decnet/default_device to the
|
|
||||||
device you want DECnet to route packets out of when no specific route
|
|
||||||
is available. Usually this will be eth0, for example:
|
|
||||||
|
|
||||||
echo -n "eth0" >/proc/sys/net/decnet/default_device
|
|
||||||
|
|
||||||
If you don't set the default device, then it will default to the first
|
|
||||||
ethernet card which has been autoconfigured as described above. You can
|
|
||||||
confirm that by looking in the default_device file of course.
|
|
||||||
|
|
||||||
There is a list of what the other files under /proc/sys/net/decnet/ do
|
|
||||||
on the kernel patch web site (shown above).
|
|
||||||
|
|
||||||
4) Run time kernel configuration
|
|
||||||
|
|
||||||
This is either done through the sysctl/proc interface (see the kernel web
|
|
||||||
pages for details on what the various options do) or through the iproute2
|
|
||||||
package in the same way as IPv4/6 configuration is performed.
|
|
||||||
|
|
||||||
Documentation for iproute2 is included with the package, although there is
|
|
||||||
as yet no specific section on DECnet, most of the features apply to both
|
|
||||||
IP and DECnet, albeit with DECnet addresses instead of IP addresses and
|
|
||||||
a reduced functionality.
|
|
||||||
|
|
||||||
If you want to configure a DECnet router you'll need the iproute2 package
|
|
||||||
since its the _only_ way to add and delete routes currently. Eventually
|
|
||||||
there will be a routing daemon to send and receive routing messages for
|
|
||||||
each interface and update the kernel routing tables accordingly. The
|
|
||||||
routing daemon will use netfilter to listen to routing packets, and
|
|
||||||
rtnetlink to update the kernels routing tables.
|
|
||||||
|
|
||||||
The DECnet raw socket layer has been removed since it was there purely
|
|
||||||
for use by the routing daemon which will now use netfilter (a much cleaner
|
|
||||||
and more generic solution) instead.
|
|
||||||
|
|
||||||
5) How can I tell if its working ?
|
|
||||||
|
|
||||||
Here is a quick guide of what to look for in order to know if your DECnet
|
|
||||||
kernel subsystem is working.
|
|
||||||
|
|
||||||
- Is the node address set (see /proc/sys/net/decnet/node_address)
|
|
||||||
- Is the node of the correct type
|
|
||||||
(see /proc/sys/net/decnet/conf/<dev>/forwarding)
|
|
||||||
- Is the Ethernet MAC address of each Ethernet card set to match
|
|
||||||
the DECnet address. If in doubt use the dn2ethaddr utility available
|
|
||||||
at the ftp archive.
|
|
||||||
- If the previous two steps are satisfied, and the Ethernet card is up,
|
|
||||||
you should find that it is listed in /proc/net/decnet_dev and also
|
|
||||||
that it appears as a directory in /proc/sys/net/decnet/conf/. The
|
|
||||||
loopback device (lo) should also appear and is required to communicate
|
|
||||||
within a node.
|
|
||||||
- If you have any DECnet routers on your network, they should appear
|
|
||||||
in /proc/net/decnet_neigh, otherwise this file will only contain the
|
|
||||||
entry for the node itself (if it doesn't check to see if lo is up).
|
|
||||||
- If you want to send to any node which is not listed in the
|
|
||||||
/proc/net/decnet_neigh file, you'll need to set the default device
|
|
||||||
to point to an Ethernet card with connection to a router. This is
|
|
||||||
again done with the /proc/sys/net/decnet/default_device file.
|
|
||||||
- Try starting a simple server and client, like the dnping/dnmirror
|
|
||||||
over the loopback interface. With luck they should communicate.
|
|
||||||
For this step and those after, you'll need the DECnet library
|
|
||||||
which can be obtained from the above ftp sites as well as the
|
|
||||||
actual utilities themselves.
|
|
||||||
- If this seems to work, then try talking to a node on your local
|
|
||||||
network, and see if you can obtain the same results.
|
|
||||||
- At this point you are on your own... :-)
|
|
||||||
|
|
||||||
6) How to send a bug report
|
|
||||||
|
|
||||||
If you've found a bug and want to report it, then there are several things
|
|
||||||
you can do to help me work out exactly what it is that is wrong. Useful
|
|
||||||
information (_most_ of which _is_ _essential_) includes:
|
|
||||||
|
|
||||||
- What kernel version are you running ?
|
|
||||||
- What version of the patch are you running ?
|
|
||||||
- How far though the above set of tests can you get ?
|
|
||||||
- What is in the /proc/decnet* files and /proc/sys/net/decnet/* files ?
|
|
||||||
- Which services are you running ?
|
|
||||||
- Which client caused the problem ?
|
|
||||||
- How much data was being transferred ?
|
|
||||||
- Was the network congested ?
|
|
||||||
- How can the problem be reproduced ?
|
|
||||||
- Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of
|
|
||||||
tcpdump don't understand how to dump DECnet properly, so including
|
|
||||||
the hex listing of the packet contents is _essential_, usually the -x flag.
|
|
||||||
You may also need to increase the length grabbed with the -s flag. The
|
|
||||||
-e flag also provides very useful information (ethernet MAC addresses))
|
|
||||||
|
|
||||||
7) MAC FAQ
|
|
||||||
|
|
||||||
A quick FAQ on ethernet MAC addresses to explain how Linux and DECnet
|
|
||||||
interact and how to get the best performance from your hardware.
|
|
||||||
|
|
||||||
Ethernet cards are designed to normally only pass received network frames
|
|
||||||
to a host computer when they are addressed to it, or to the broadcast address.
|
|
||||||
|
|
||||||
Linux has an interface which allows the setting of extra addresses for
|
|
||||||
an ethernet card to listen to. If the ethernet card supports it, the
|
|
||||||
filtering operation will be done in hardware, if not the extra unwanted packets
|
|
||||||
received will be discarded by the host computer. In the latter case,
|
|
||||||
significant processor time and bus bandwidth can be used up on a busy
|
|
||||||
network (see the NAPI documentation for a longer explanation of these
|
|
||||||
effects).
|
|
||||||
|
|
||||||
DECnet makes use of this interface to allow running DECnet on an ethernet
|
|
||||||
card which has already been configured using TCP/IP (presumably using the
|
|
||||||
built in MAC address of the card, as usual) and/or to allow multiple DECnet
|
|
||||||
addresses on each physical interface. If you do this, be aware that if your
|
|
||||||
ethernet card doesn't support perfect hashing in its MAC address filter
|
|
||||||
then your computer will be doing more work than required. Some cards
|
|
||||||
will simply set themselves into promiscuous mode in order to receive
|
|
||||||
packets from the DECnet specified addresses. So if you have one of these
|
|
||||||
cards its better to set the MAC address of the card as described above
|
|
||||||
to gain the best efficiency. Better still is to use a card which supports
|
|
||||||
NAPI as well.
|
|
||||||
|
|
||||||
|
|
||||||
8) Mailing list
|
|
||||||
|
|
||||||
If you are keen to get involved in development, or want to ask questions
|
|
||||||
about configuration, or even just report bugs, then there is a mailing
|
|
||||||
list that you can join, details are at:
|
|
||||||
|
|
||||||
http://sourceforge.net/mail/?group_id=4993
|
|
||||||
|
|
||||||
9) Legal Info
|
|
||||||
|
|
||||||
The Linux DECnet project team have placed their code under the GPL. The
|
|
||||||
software is provided "as is" and without warranty express or implied.
|
|
||||||
DECnet is a trademark of Compaq. This software is not a product of
|
|
||||||
Compaq. We acknowledge the help of people at Compaq in providing extra
|
|
||||||
documentation above and beyond what was previously publicly available.
|
|
||||||
|
|
||||||
Steve Whitehouse <SteveW@ACM.org>
|
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ cipso_cache_enable - BOOLEAN
|
|||||||
cipso_cache_bucket_size - INTEGER
|
cipso_cache_bucket_size - INTEGER
|
||||||
The CIPSO label cache consists of a fixed size hash table with each
|
The CIPSO label cache consists of a fixed size hash table with each
|
||||||
hash bucket containing a number of cache entries. This variable limits
|
hash bucket containing a number of cache entries. This variable limits
|
||||||
the number of entries in each hash bucket; the larger the value the
|
the number of entries in each hash bucket; the larger the value is, the
|
||||||
more CIPSO label mappings that can be cached. When the number of
|
more CIPSO label mappings that can be cached. When the number of
|
||||||
entries in a given hash bucket reaches this limit adding new entries
|
entries in a given hash bucket reaches this limit adding new entries
|
||||||
causes the oldest entry in the bucket to be removed to make room.
|
causes the oldest entry in the bucket to be removed to make room.
|
||||||
@@ -873,7 +873,7 @@ ip_nonlocal_bind - BOOLEAN
|
|||||||
which can be quite useful - but may break some applications.
|
which can be quite useful - but may break some applications.
|
||||||
Default: 0
|
Default: 0
|
||||||
|
|
||||||
ip_dynaddr - BOOLEAN
|
ip_dynaddr - INTEGER
|
||||||
If set non-zero, enables support for dynamic addresses.
|
If set non-zero, enables support for dynamic addresses.
|
||||||
If set to a non-zero value larger than 1, a kernel log
|
If set to a non-zero value larger than 1, a kernel log
|
||||||
message will be printed when dynamic address rewriting
|
message will be printed when dynamic address rewriting
|
||||||
@@ -1658,7 +1658,7 @@ use_tempaddr - INTEGER
|
|||||||
|
|
||||||
temp_valid_lft - INTEGER
|
temp_valid_lft - INTEGER
|
||||||
valid lifetime (in seconds) for temporary addresses.
|
valid lifetime (in seconds) for temporary addresses.
|
||||||
Default: 604800 (7 days)
|
Default: 172800 (2 days)
|
||||||
|
|
||||||
temp_prefered_lft - INTEGER
|
temp_prefered_lft - INTEGER
|
||||||
Preferred lifetime (in seconds) for temporary addresses.
|
Preferred lifetime (in seconds) for temporary addresses.
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ conn_reuse_mode - INTEGER
|
|||||||
|
|
||||||
0: disable any special handling on port reuse. The new
|
0: disable any special handling on port reuse. The new
|
||||||
connection will be delivered to the same real server that was
|
connection will be delivered to the same real server that was
|
||||||
servicing the previous connection. This will effectively
|
servicing the previous connection.
|
||||||
disable expire_nodest_conn.
|
|
||||||
|
|
||||||
bit 1: enable rescheduling of new connections when it is safe.
|
bit 1: enable rescheduling of new connections when it is safe.
|
||||||
That is, whenever expire_nodest_conn and for TCP sockets, when
|
That is, whenever expire_nodest_conn and for TCP sockets, when
|
||||||
|
|||||||
@@ -423,9 +423,8 @@ struct clk
|
|||||||
%pC pll1
|
%pC pll1
|
||||||
%pCn pll1
|
%pCn pll1
|
||||||
|
|
||||||
For printing struct clk structures. ``%pC`` and ``%pCn`` print the name
|
For printing struct clk structures. %pC and %pCn print the name of the clock
|
||||||
(Common Clock Framework) or address (legacy clock framework) of the
|
(Common Clock Framework) or a unique 32-bit ID (legacy clock framework).
|
||||||
structure.
|
|
||||||
|
|
||||||
Passed by reference.
|
Passed by reference.
|
||||||
|
|
||||||
|
|||||||
@@ -171,7 +171,16 @@ Trees
|
|||||||
- The finalized and tagged releases of all stable kernels can be found
|
- The finalized and tagged releases of all stable kernels can be found
|
||||||
in separate branches per version at:
|
in separate branches per version at:
|
||||||
|
|
||||||
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
|
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||||
|
|
||||||
|
- The release candidate of all stable kernel versions can be found at:
|
||||||
|
|
||||||
|
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
The -stable-rc tree is a snapshot in time of the stable-queue tree and
|
||||||
|
will change frequently, hence will be rebased often. It should only be
|
||||||
|
used for testing purposes (e.g. to be consumed by CI systems).
|
||||||
|
|
||||||
|
|
||||||
Review committee
|
Review committee
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ as you intend it to.
|
|||||||
|
|
||||||
The maintainer will thank you if you write your patch description in a
|
The maintainer will thank you if you write your patch description in a
|
||||||
form which can be easily pulled into Linux's source code management
|
form which can be easily pulled into Linux's source code management
|
||||||
system, ``git``, as a "commit log". See :ref:`explicit_in_reply_to`.
|
system, ``git``, as a "commit log". See :ref:`the_canonical_patch_format`.
|
||||||
|
|
||||||
Solve only one problem per patch. If your description starts to get
|
Solve only one problem per patch. If your description starts to get
|
||||||
long, that's a sign that you probably need to split up your patch.
|
long, that's a sign that you probably need to split up your patch.
|
||||||
|
|||||||
@@ -429,7 +429,7 @@ ref
|
|||||||
no-jd
|
no-jd
|
||||||
BIOS setup but without jack-detection
|
BIOS setup but without jack-detection
|
||||||
intel
|
intel
|
||||||
Intel DG45* mobos
|
Intel D*45* mobos
|
||||||
dell-m6-amic
|
dell-m6-amic
|
||||||
Dell desktops/laptops with analog mics
|
Dell desktops/laptops with analog mics
|
||||||
dell-m6-dmic
|
dell-m6-dmic
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from sphinx.util.pycompat import execfile_
|
from sphinx.util.osutil import fs_encoding
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
def loadConfig(namespace):
|
def loadConfig(namespace):
|
||||||
@@ -25,7 +25,9 @@ def loadConfig(namespace):
|
|||||||
sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
|
sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
|
||||||
config = namespace.copy()
|
config = namespace.copy()
|
||||||
config['__file__'] = config_file
|
config['__file__'] = config_file
|
||||||
execfile_(config_file, config)
|
with open(config_file, 'rb') as f:
|
||||||
|
code = compile(f.read(), fs_encoding, 'exec')
|
||||||
|
exec(code, config)
|
||||||
del config['__file__']
|
del config['__file__']
|
||||||
namespace.update(config)
|
namespace.update(config)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/env perl
|
||||||
use strict;
|
use strict;
|
||||||
use Text::Tabs;
|
use Text::Tabs;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ show up in /proc/sys/kernel:
|
|||||||
- msgmnb
|
- msgmnb
|
||||||
- msgmni
|
- msgmni
|
||||||
- nmi_watchdog
|
- nmi_watchdog
|
||||||
|
- oops_limit
|
||||||
- osrelease
|
- osrelease
|
||||||
- ostype
|
- ostype
|
||||||
- overflowgid
|
- overflowgid
|
||||||
@@ -95,6 +96,7 @@ show up in /proc/sys/kernel:
|
|||||||
- threads-max
|
- threads-max
|
||||||
- unprivileged_bpf_disabled
|
- unprivileged_bpf_disabled
|
||||||
- unknown_nmi_panic
|
- unknown_nmi_panic
|
||||||
|
- warn_limit
|
||||||
- watchdog
|
- watchdog
|
||||||
- watchdog_thresh
|
- watchdog_thresh
|
||||||
- version
|
- version
|
||||||
@@ -540,6 +542,15 @@ scanned for a given scan.
|
|||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
oops_limit:
|
||||||
|
|
||||||
|
Number of kernel oopses after which the kernel should panic when
|
||||||
|
``panic_on_oops`` is not set. Setting this to 0 disables checking
|
||||||
|
the count. Setting this to 1 has the same effect as setting
|
||||||
|
``panic_on_oops=1``. The default value is 10000.
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
|
||||||
osrelease, ostype & version:
|
osrelease, ostype & version:
|
||||||
|
|
||||||
# cat osrelease
|
# cat osrelease
|
||||||
@@ -806,9 +817,40 @@ The kernel command line parameter printk.devkmsg= overrides this and is
|
|||||||
a one-time setting until next reboot: once set, it cannot be changed by
|
a one-time setting until next reboot: once set, it cannot be changed by
|
||||||
this sysctl interface anymore.
|
this sysctl interface anymore.
|
||||||
|
|
||||||
==============================================================
|
pty
|
||||||
|
===
|
||||||
|
|
||||||
randomize_va_space:
|
See Documentation/filesystems/devpts.rst.
|
||||||
|
|
||||||
|
|
||||||
|
random
|
||||||
|
======
|
||||||
|
|
||||||
|
This is a directory, with the following entries:
|
||||||
|
|
||||||
|
* ``boot_id``: a UUID generated the first time this is retrieved, and
|
||||||
|
unvarying after that;
|
||||||
|
|
||||||
|
* ``uuid``: a UUID generated every time this is retrieved (this can
|
||||||
|
thus be used to generate UUIDs at will);
|
||||||
|
|
||||||
|
* ``entropy_avail``: the pool's entropy count, in bits;
|
||||||
|
|
||||||
|
* ``poolsize``: the entropy pool size, in bits;
|
||||||
|
|
||||||
|
* ``urandom_min_reseed_secs``: obsolete (used to determine the minimum
|
||||||
|
number of seconds between urandom pool reseeding). This file is
|
||||||
|
writable for compatibility purposes, but writing to it has no effect
|
||||||
|
on any RNG behavior;
|
||||||
|
|
||||||
|
* ``write_wakeup_threshold``: when the entropy count drops below this
|
||||||
|
(as a number of bits), processes waiting to write to ``/dev/random``
|
||||||
|
are woken up. This file is writable for compatibility purposes, but
|
||||||
|
writing to it has no effect on any RNG behavior.
|
||||||
|
|
||||||
|
|
||||||
|
randomize_va_space
|
||||||
|
==================
|
||||||
|
|
||||||
This option can be used to select the type of process address
|
This option can be used to select the type of process address
|
||||||
space randomization that is used in the system, for architectures
|
space randomization that is used in the system, for architectures
|
||||||
@@ -1056,6 +1098,15 @@ example. If a system hangs up, try pressing the NMI switch.
|
|||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
warn_limit:
|
||||||
|
|
||||||
|
Number of kernel warnings after which the kernel should panic when
|
||||||
|
``panic_on_warn`` is not set. Setting this to 0 disables checking
|
||||||
|
the warning count. Setting this to 1 has the same effect as setting
|
||||||
|
``panic_on_warn=1``. The default value is 0.
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
|
||||||
watchdog:
|
watchdog:
|
||||||
|
|
||||||
This parameter can be used to disable or enable the soft lockup detector
|
This parameter can be used to disable or enable the soft lockup detector
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ Table : Subdirectories in /proc/sys/net
|
|||||||
ethernet Ethernet protocol rose X.25 PLP layer
|
ethernet Ethernet protocol rose X.25 PLP layer
|
||||||
ipv4 IP version 4 x25 X.25 protocol
|
ipv4 IP version 4 x25 X.25 protocol
|
||||||
ipx IPX token-ring IBM token ring
|
ipx IPX token-ring IBM token ring
|
||||||
bridge Bridging decnet DEC net
|
|
||||||
ipv6 IP version 6 tipc TIPC
|
ipv6 IP version 6 tipc TIPC
|
||||||
..............................................................................
|
..............................................................................
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
# The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD
|
# The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD
|
||||||
#
|
#
|
||||||
# Copyright (c) 2010 Rising Tide Systems
|
# Copyright (c) 2010 Rising Tide Systems
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
# add symbolic names to read_msr / write_msr in trace
|
# add symbolic names to read_msr / write_msr in trace
|
||||||
# decode_msr msr-index.h < trace
|
# decode_msr msr-index.h < trace
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/env perl
|
||||||
# This is a POC (proof of concept or piece of crap, take your pick) for reading the
|
# This is a POC (proof of concept or piece of crap, take your pick) for reading the
|
||||||
# text representation of trace output related to page allocation. It makes an attempt
|
# text representation of trace output related to page allocation. It makes an attempt
|
||||||
# to extract some high-level information on what is going on. The accuracy of the parser
|
# to extract some high-level information on what is going on. The accuracy of the parser
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/env perl
|
||||||
# This is a POC for reading the text representation of trace output related to
|
# This is a POC for reading the text representation of trace output related to
|
||||||
# page reclaim. It makes an attempt to extract some high-level information on
|
# page reclaim. It makes an attempt to extract some high-level information on
|
||||||
# what is going on. The accuracy of the parser may vary
|
# what is going on. The accuracy of the parser may vary
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ Shadow pages contain the following information:
|
|||||||
shadow pages) so role.quadrant takes values in the range 0..3. Each
|
shadow pages) so role.quadrant takes values in the range 0..3. Each
|
||||||
quadrant maps 1GB virtual address space.
|
quadrant maps 1GB virtual address space.
|
||||||
role.access:
|
role.access:
|
||||||
Inherited guest access permissions in the form uwx. Note execute
|
Inherited guest access permissions from the parent ptes in the form uwx.
|
||||||
permission is positive, not negative.
|
Note execute permission is positive, not negative.
|
||||||
role.invalid:
|
role.invalid:
|
||||||
The page is invalid and should not be used. It is a root page that is
|
The page is invalid and should not be used. It is a root page that is
|
||||||
currently pinned (by a cpu hardware register pointing to it); once it is
|
currently pinned (by a cpu hardware register pointing to it); once it is
|
||||||
|
|||||||
@@ -3957,13 +3957,6 @@ F: include/uapi/linux/dccp.h
|
|||||||
F: include/linux/tfrc.h
|
F: include/linux/tfrc.h
|
||||||
F: net/dccp/
|
F: net/dccp/
|
||||||
|
|
||||||
DECnet NETWORK LAYER
|
|
||||||
W: http://linux-decnet.sourceforge.net
|
|
||||||
L: linux-decnet-user@lists.sourceforge.net
|
|
||||||
S: Orphan
|
|
||||||
F: Documentation/networking/decnet.txt
|
|
||||||
F: net/decnet/
|
|
||||||
|
|
||||||
DECSTATION PLATFORM SUPPORT
|
DECSTATION PLATFORM SUPPORT
|
||||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||||
L: linux-mips@linux-mips.org
|
L: linux-mips@linux-mips.org
|
||||||
@@ -11342,6 +11335,7 @@ F: drivers/block/brd.c
|
|||||||
|
|
||||||
RANDOM NUMBER DRIVER
|
RANDOM NUMBER DRIVER
|
||||||
M: "Theodore Ts'o" <tytso@mit.edu>
|
M: "Theodore Ts'o" <tytso@mit.edu>
|
||||||
|
M: Jason A. Donenfeld <Jason@zx2c4.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/random.c
|
F: drivers/char/random.c
|
||||||
|
|
||||||
|
|||||||
59
Makefile
59
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 14
|
PATCHLEVEL = 14
|
||||||
SUBLEVEL = 190
|
SUBLEVEL = 336
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Petit Gorille
|
NAME = Petit Gorille
|
||||||
|
|
||||||
@@ -88,10 +88,17 @@ endif
|
|||||||
|
|
||||||
# If the user is running make -s (silent mode), suppress echoing of
|
# If the user is running make -s (silent mode), suppress echoing of
|
||||||
# commands
|
# commands
|
||||||
|
# make-4.0 (and later) keep single letter options in the 1st word of MAKEFLAGS.
|
||||||
|
|
||||||
ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
|
ifeq ($(filter 3.%,$(MAKE_VERSION)),)
|
||||||
quiet=silent_
|
silence:=$(findstring s,$(firstword -$(MAKEFLAGS)))
|
||||||
tools_silent=s
|
else
|
||||||
|
silence:=$(findstring s,$(filter-out --%,$(MAKEFLAGS)))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(silence),s)
|
||||||
|
quiet=silent_
|
||||||
|
tools_silent=s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export quiet Q KBUILD_VERBOSE
|
export quiet Q KBUILD_VERBOSE
|
||||||
@@ -404,7 +411,7 @@ endif
|
|||||||
AWK = awk
|
AWK = awk
|
||||||
GENKSYMS = scripts/genksyms/genksyms
|
GENKSYMS = scripts/genksyms/genksyms
|
||||||
INSTALLKERNEL := installkernel
|
INSTALLKERNEL := installkernel
|
||||||
DEPMOD = /sbin/depmod
|
DEPMOD = depmod
|
||||||
PERL = perl
|
PERL = perl
|
||||||
PYTHON = python
|
PYTHON = python
|
||||||
CHECK = sparse
|
CHECK = sparse
|
||||||
@@ -460,6 +467,7 @@ KBUILD_CFLAGS_KERNEL :=
|
|||||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
KBUILD_AFLAGS_MODULE := -DMODULE
|
||||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
KBUILD_CFLAGS_MODULE := -DMODULE
|
||||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||||
|
LDFLAGS :=
|
||||||
GCC_PLUGINS_CFLAGS :=
|
GCC_PLUGINS_CFLAGS :=
|
||||||
CLANG_FLAGS :=
|
CLANG_FLAGS :=
|
||||||
|
|
||||||
@@ -805,6 +813,10 @@ LDFLAGS += -O2
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
||||||
|
|
||||||
|
# These result in bogus false positives
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
|
||||||
|
|
||||||
ifdef CONFIG_FRAME_POINTER
|
ifdef CONFIG_FRAME_POINTER
|
||||||
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||||
else
|
else
|
||||||
@@ -817,12 +829,20 @@ ifndef CONFIG_FUNCTION_TRACER
|
|||||||
KBUILD_CFLAGS += -fomit-frame-pointer
|
KBUILD_CFLAGS += -fomit-frame-pointer
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
# Initialize all stack variables with a 0xAA pattern.
|
||||||
# Initialize all stack variables with a pattern, if desired.
|
ifdef CONFIG_INIT_STACK_ALL_PATTERN
|
||||||
ifdef CONFIG_INIT_STACK_ALL
|
|
||||||
KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Initialize all stack variables with a zero value.
|
||||||
|
ifdef CONFIG_INIT_STACK_ALL_ZERO
|
||||||
|
# Future support for zero initialization is still being debated, see
|
||||||
|
# https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
|
||||||
|
# renamed or dropped.
|
||||||
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
|
||||||
|
KBUILD_CFLAGS += $(call cc-option, -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang)
|
||||||
|
endif
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO
|
ifdef CONFIG_DEBUG_INFO
|
||||||
@@ -849,6 +869,13 @@ ifdef CONFIG_FUNCTION_TRACER
|
|||||||
ifndef CC_FLAGS_FTRACE
|
ifndef CC_FLAGS_FTRACE
|
||||||
CC_FLAGS_FTRACE := -pg
|
CC_FLAGS_FTRACE := -pg
|
||||||
endif
|
endif
|
||||||
|
ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||||
|
# gcc 5 supports generating the mcount tables directly
|
||||||
|
ifeq ($(call cc-option-yn,-mrecord-mcount),y)
|
||||||
|
CC_FLAGS_FTRACE += -mrecord-mcount
|
||||||
|
export CC_USING_RECORD_MCOUNT := 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
export CC_FLAGS_FTRACE
|
export CC_FLAGS_FTRACE
|
||||||
ifdef CONFIG_HAVE_FENTRY
|
ifdef CONFIG_HAVE_FENTRY
|
||||||
CC_USING_FENTRY := $(call cc-option, -mfentry -DCC_USING_FENTRY)
|
CC_USING_FENTRY := $(call cc-option, -mfentry -DCC_USING_FENTRY)
|
||||||
@@ -1000,12 +1027,6 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
|
|||||||
# change __FILE__ to the relative path from the srctree
|
# change __FILE__ to the relative path from the srctree
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
||||||
|
|
||||||
# ensure -fcf-protection is disabled when using retpoline as it is
|
|
||||||
# incompatible with -mindirect-branch=thunk-extern
|
|
||||||
ifdef CONFIG_RETPOLINE
|
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# use the deterministic mode of AR if available
|
# use the deterministic mode of AR if available
|
||||||
KBUILD_ARFLAGS := $(call ar-option,D)
|
KBUILD_ARFLAGS := $(call ar-option,D)
|
||||||
|
|
||||||
@@ -1020,8 +1041,7 @@ KBUILD_AFLAGS += $(ARCH_AFLAGS) $(KAFLAGS)
|
|||||||
KBUILD_CFLAGS += $(ARCH_CFLAGS) $(KCFLAGS)
|
KBUILD_CFLAGS += $(ARCH_CFLAGS) $(KCFLAGS)
|
||||||
|
|
||||||
# Use --build-id when available.
|
# Use --build-id when available.
|
||||||
LDFLAGS_BUILD_ID := $(patsubst -Wl$(comma)%,%,\
|
LDFLAGS_BUILD_ID := $(call ld-option, --build-id)
|
||||||
$(call cc-ldoption, -Wl$(comma)--build-id,))
|
|
||||||
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||||
|
|
||||||
@@ -1029,6 +1049,9 @@ ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
|||||||
LDFLAGS_vmlinux += $(call ld-option, --gc-sections,)
|
LDFLAGS_vmlinux += $(call ld-option, --gc-sections,)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
LDFLAGS += -z noexecstack
|
||||||
|
LDFLAGS += $(call ld-option,--no-warn-rwx-segments)
|
||||||
|
|
||||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||||
LDFLAGS_vmlinux += $(call ld-option, -X,)
|
LDFLAGS_vmlinux += $(call ld-option, -X,)
|
||||||
endif
|
endif
|
||||||
@@ -1302,7 +1325,7 @@ endif
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Disable clang-specific config options when using a different compiler
|
# Disable clang-specific config options when using a different compiler
|
||||||
clang-specific-configs := LTO_CLANG CFI_CLANG SHADOW_CALL_STACK INIT_STACK_ALL
|
clang-specific-configs := LTO_CLANG CFI_CLANG SHADOW_CALL_STACK INIT_STACK_ALL_ZERO
|
||||||
|
|
||||||
PHONY += check-clang-specific-options
|
PHONY += check-clang-specific-options
|
||||||
check-clang-specific-options: $(KCONFIG_CONFIG) FORCE
|
check-clang-specific-options: $(KCONFIG_CONFIG) FORCE
|
||||||
@@ -1388,7 +1411,7 @@ endef
|
|||||||
|
|
||||||
define filechk_version.h
|
define filechk_version.h
|
||||||
(echo \#define LINUX_VERSION_CODE $(shell \
|
(echo \#define LINUX_VERSION_CODE $(shell \
|
||||||
expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
|
expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
|
||||||
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
|
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|||||||
13
arch/Kconfig
13
arch/Kconfig
@@ -237,6 +237,9 @@ config ARCH_HAS_FORTIFY_SOURCE
|
|||||||
config ARCH_HAS_SET_MEMORY
|
config ARCH_HAS_SET_MEMORY
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_HAS_CPU_FINALIZE_INIT
|
||||||
|
bool
|
||||||
|
|
||||||
# Select if arch init_task initializer is different to init/init_task.c
|
# Select if arch init_task initializer is different to init/init_task.c
|
||||||
config ARCH_INIT_TASK
|
config ARCH_INIT_TASK
|
||||||
bool
|
bool
|
||||||
@@ -339,6 +342,13 @@ config HAVE_RCU_TABLE_FREE
|
|||||||
config HAVE_RCU_TABLE_INVALIDATE
|
config HAVE_RCU_TABLE_INVALIDATE
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_WANT_IRQS_OFF_ACTIVATE_MM
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Temporary select until all architectures can be converted to have
|
||||||
|
irqs disabled over activate_mm. Architectures that do IPI based TLB
|
||||||
|
shootdowns should enable this.
|
||||||
|
|
||||||
config ARCH_HAVE_NMI_SAFE_CMPXCHG
|
config ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
bool
|
bool
|
||||||
|
|
||||||
@@ -1108,6 +1118,9 @@ config HAVE_ARCH_COMPILER_H
|
|||||||
linux/compiler-*.h in order to override macro definitions that those
|
linux/compiler-*.h in order to override macro definitions that those
|
||||||
headers generally provide.
|
headers generally provide.
|
||||||
|
|
||||||
|
config ARCH_USE_MEMREMAP_PROT
|
||||||
|
bool
|
||||||
|
|
||||||
# Select if the architecture has support for applying RELR relocations.
|
# Select if the architecture has support for applying RELR relocations.
|
||||||
config ARCH_HAS_RELR
|
config ARCH_HAS_RELR
|
||||||
bool
|
bool
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* include/asm-alpha/bugs.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 1994 Linus Torvalds
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is included by init/main.c to check for architecture-dependent bugs.
|
|
||||||
*
|
|
||||||
* Needs:
|
|
||||||
* void check_bugs(void);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I don't know of any alpha bugs yet.. Nice chip
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void check_bugs(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -61,7 +61,7 @@ extern inline void set_hae(unsigned long new_hae)
|
|||||||
* Change virtual addresses to physical addresses and vv.
|
* Change virtual addresses to physical addresses and vv.
|
||||||
*/
|
*/
|
||||||
#ifdef USE_48_BIT_KSEG
|
#ifdef USE_48_BIT_KSEG
|
||||||
static inline unsigned long virt_to_phys(void *address)
|
static inline unsigned long virt_to_phys(volatile void *address)
|
||||||
{
|
{
|
||||||
return (unsigned long)address - IDENT_ADDR;
|
return (unsigned long)address - IDENT_ADDR;
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ static inline void * phys_to_virt(unsigned long address)
|
|||||||
return (void *) (address + IDENT_ADDR);
|
return (void *) (address + IDENT_ADDR);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline unsigned long virt_to_phys(void *address)
|
static inline unsigned long virt_to_phys(volatile void *address)
|
||||||
{
|
{
|
||||||
unsigned long phys = (unsigned long)address;
|
unsigned long phys = (unsigned long)address;
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ static inline dma_addr_t __deprecated isa_page_to_bus(struct page *page)
|
|||||||
extern unsigned long __direct_map_base;
|
extern unsigned long __direct_map_base;
|
||||||
extern unsigned long __direct_map_size;
|
extern unsigned long __direct_map_size;
|
||||||
|
|
||||||
static inline unsigned long __deprecated virt_to_bus(void *address)
|
static inline unsigned long __deprecated virt_to_bus(volatile void *address)
|
||||||
{
|
{
|
||||||
unsigned long phys = virt_to_phys(address);
|
unsigned long phys = virt_to_phys(address);
|
||||||
unsigned long bus = phys + __direct_map_base;
|
unsigned long bus = phys + __direct_map_base;
|
||||||
@@ -493,10 +493,10 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ioread16be(p) be16_to_cpu(ioread16(p))
|
#define ioread16be(p) swab16(ioread16(p))
|
||||||
#define ioread32be(p) be32_to_cpu(ioread32(p))
|
#define ioread32be(p) swab32(ioread32(p))
|
||||||
#define iowrite16be(v,p) iowrite16(cpu_to_be16(v), (p))
|
#define iowrite16be(v,p) iowrite16(swab16(v), (p))
|
||||||
#define iowrite32be(v,p) iowrite32(cpu_to_be32(v), (p))
|
#define iowrite32be(v,p) iowrite32(swab32(v), (p))
|
||||||
|
|
||||||
#define inb_p inb
|
#define inb_p inb
|
||||||
#define inw_p inw
|
#define inw_p inw
|
||||||
|
|||||||
@@ -28,5 +28,6 @@ static inline cycles_t get_cycles (void)
|
|||||||
__asm__ __volatile__ ("rpcc %0" : "=r"(ret));
|
__asm__ __volatile__ ("rpcc %0" : "=r"(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#define get_cycles get_cycles
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -469,8 +469,10 @@ entSys:
|
|||||||
#ifdef CONFIG_AUDITSYSCALL
|
#ifdef CONFIG_AUDITSYSCALL
|
||||||
lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
|
lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
|
||||||
and $3, $6, $3
|
and $3, $6, $3
|
||||||
#endif
|
|
||||||
bne $3, strace
|
bne $3, strace
|
||||||
|
#else
|
||||||
|
blbs $3, strace /* check for SYSCALL_TRACE in disguise */
|
||||||
|
#endif
|
||||||
beq $4, 1f
|
beq $4, 1f
|
||||||
ldq $27, 0($5)
|
ldq $27, 0($5)
|
||||||
1: jsr $26, ($27), alpha_ni_syscall
|
1: jsr $26, ($27), alpha_ni_syscall
|
||||||
|
|||||||
@@ -158,10 +158,8 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
|
|||||||
base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
|
base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
|
||||||
symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
|
symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
|
||||||
|
|
||||||
/* The small sections were sorted to the end of the segment.
|
|
||||||
The following should definitely cover them. */
|
|
||||||
gp = (u64)me->core_layout.base + me->core_layout.size - 0x8000;
|
|
||||||
got = sechdrs[me->arch.gotsecindex].sh_addr;
|
got = sechdrs[me->arch.gotsecindex].sh_addr;
|
||||||
|
gp = got + 0x8000;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
|
unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
|
||||||
|
|||||||
@@ -469,8 +469,7 @@ setup_memory(void *kernel_end)
|
|||||||
extern void setup_memory(void *);
|
extern void setup_memory(void *);
|
||||||
#endif /* !CONFIG_DISCONTIGMEM */
|
#endif /* !CONFIG_DISCONTIGMEM */
|
||||||
|
|
||||||
int __init
|
int page_is_ram(unsigned long pfn)
|
||||||
page_is_ram(unsigned long pfn)
|
|
||||||
{
|
{
|
||||||
struct memclust_struct * cluster;
|
struct memclust_struct * cluster;
|
||||||
struct memdesc_struct * memdesc;
|
struct memdesc_struct * memdesc;
|
||||||
|
|||||||
@@ -585,7 +585,7 @@ void
|
|||||||
smp_send_stop(void)
|
smp_send_stop(void)
|
||||||
{
|
{
|
||||||
cpumask_t to_whom;
|
cpumask_t to_whom;
|
||||||
cpumask_copy(&to_whom, cpu_possible_mask);
|
cpumask_copy(&to_whom, cpu_online_mask);
|
||||||
cpumask_clear_cpu(smp_processor_id(), &to_whom);
|
cpumask_clear_cpu(smp_processor_id(), &to_whom);
|
||||||
#ifdef DEBUG_IPI_MSG
|
#ifdef DEBUG_IPI_MSG
|
||||||
if (hard_smp_processor_id() != boot_cpu_id)
|
if (hard_smp_processor_id() != boot_cpu_id)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ srmcons_do_receive_chars(struct tty_port *port)
|
|||||||
} while((result.bits.status & 1) && (++loops < 10));
|
} while((result.bits.status & 1) && (++loops < 10));
|
||||||
|
|
||||||
if (count)
|
if (count)
|
||||||
tty_schedule_flip(port);
|
tty_flip_buffer_push(port);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ die_if_kernel(char * str, struct pt_regs *regs, long err, unsigned long *r9_15)
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
do_exit(SIGSEGV);
|
make_task_dead(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_MATHEMU
|
#ifndef CONFIG_MATHEMU
|
||||||
@@ -241,7 +241,21 @@ do_entIF(unsigned long type, struct pt_regs *regs)
|
|||||||
siginfo_t info;
|
siginfo_t info;
|
||||||
int signo, code;
|
int signo, code;
|
||||||
|
|
||||||
if ((regs->ps & ~IPL_MAX) == 0) {
|
if (type == 3) { /* FEN fault */
|
||||||
|
/* Irritating users can call PAL_clrfen to disable the
|
||||||
|
FPU for the process. The kernel will then trap in
|
||||||
|
do_switch_stack and undo_switch_stack when we try
|
||||||
|
to save and restore the FP registers.
|
||||||
|
|
||||||
|
Given that GCC by default generates code that uses the
|
||||||
|
FP registers, PAL_clrfen is not useful except for DoS
|
||||||
|
attacks. So turn the bleeding FPU back on and be done
|
||||||
|
with it. */
|
||||||
|
current_thread_info()->pcb.flags |= 1;
|
||||||
|
__reload_thread(¤t_thread_info()->pcb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!user_mode(regs)) {
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
const unsigned int *data
|
const unsigned int *data
|
||||||
= (const unsigned int *) regs->pc;
|
= (const unsigned int *) regs->pc;
|
||||||
@@ -390,20 +404,6 @@ do_entIF(unsigned long type, struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* FEN fault */
|
|
||||||
/* Irritating users can call PAL_clrfen to disable the
|
|
||||||
FPU for the process. The kernel will then trap in
|
|
||||||
do_switch_stack and undo_switch_stack when we try
|
|
||||||
to save and restore the FP registers.
|
|
||||||
|
|
||||||
Given that GCC by default generates code that uses the
|
|
||||||
FP registers, PAL_clrfen is not useful except for DoS
|
|
||||||
attacks. So turn the bleeding FPU back on and be done
|
|
||||||
with it. */
|
|
||||||
current_thread_info()->pcb.flags |= 1;
|
|
||||||
__reload_thread(¤t_thread_info()->pcb);
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 5: /* illoc */
|
case 5: /* illoc */
|
||||||
default: /* unexpected instruction-fault type */
|
default: /* unexpected instruction-fault type */
|
||||||
;
|
;
|
||||||
@@ -609,7 +609,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
|
|||||||
|
|
||||||
printk("Bad unaligned kernel access at %016lx: %p %lx %lu\n",
|
printk("Bad unaligned kernel access at %016lx: %p %lx %lu\n",
|
||||||
pc, va, opcode, reg);
|
pc, va, opcode, reg);
|
||||||
do_exit(SIGSEGV);
|
make_task_dead(SIGSEGV);
|
||||||
|
|
||||||
got_exception:
|
got_exception:
|
||||||
/* Ok, we caught the exception, but we don't want it. Is there
|
/* Ok, we caught the exception, but we don't want it. Is there
|
||||||
@@ -664,7 +664,7 @@ got_exception:
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
do_exit(SIGSEGV);
|
make_task_dead(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ retry:
|
|||||||
printk(KERN_ALERT "Unable to handle kernel paging request at "
|
printk(KERN_ALERT "Unable to handle kernel paging request at "
|
||||||
"virtual address %016lx\n", address);
|
"virtual address %016lx\n", address);
|
||||||
die_if_kernel("Oops", regs, cause, (unsigned long*)regs - 16);
|
die_if_kernel("Oops", regs, cause, (unsigned long*)regs - 16);
|
||||||
do_exit(SIGKILL);
|
make_task_dead(SIGKILL);
|
||||||
|
|
||||||
/* We ran out of memory, or some other thing happened to us that
|
/* We ran out of memory, or some other thing happened to us that
|
||||||
made us unable to handle the page fault gracefully. */
|
made us unable to handle the page fault gracefully. */
|
||||||
|
|||||||
@@ -99,14 +99,9 @@ libs-y += arch/arc/lib/ $(LIBGCC)
|
|||||||
|
|
||||||
boot := arch/arc/boot
|
boot := arch/arc/boot
|
||||||
|
|
||||||
#default target for make without any arguments.
|
boot_targets := uImage uImage.bin uImage.gz uImage.lzma
|
||||||
KBUILD_IMAGE := $(boot)/bootpImage
|
|
||||||
|
|
||||||
all: bootpImage
|
|
||||||
bootpImage: vmlinux
|
|
||||||
|
|
||||||
boot_targets += uImage uImage.bin uImage.gz
|
|
||||||
|
|
||||||
|
PHONY += $(boot_targets)
|
||||||
$(boot_targets): vmlinux
|
$(boot_targets): vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,8 @@
|
|||||||
|
|
||||||
arcpct: pct {
|
arcpct: pct {
|
||||||
compatible = "snps,archs-pct";
|
compatible = "snps,archs-pct";
|
||||||
|
interrupt-parent = <&cpu_intc>;
|
||||||
|
interrupts = <20>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TIMER0 with interrupt for clockevent */
|
/* TIMER0 with interrupt for clockevent */
|
||||||
@@ -161,7 +163,7 @@
|
|||||||
reg = <0x8000 0x2000>;
|
reg = <0x8000 0x2000>;
|
||||||
interrupts = <10>;
|
interrupts = <10>;
|
||||||
interrupt-names = "macirq";
|
interrupt-names = "macirq";
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii-id";
|
||||||
snps,pbl = <32>;
|
snps,pbl = <32>;
|
||||||
snps,multicast-filter-bins = <256>;
|
snps,multicast-filter-bins = <256>;
|
||||||
clocks = <&gmacclk>;
|
clocks = <&gmacclk>;
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "snps,dwmac-mdio";
|
compatible = "snps,dwmac-mdio";
|
||||||
phy0: ethernet-phy@0 {
|
phy0: ethernet-phy@0 { /* Micrel KSZ9031 */
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ static inline void ioport_unmap(void __iomem *addr)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void iounmap(const void __iomem *addr);
|
extern void iounmap(const volatile void __iomem *addr);
|
||||||
|
|
||||||
#define ioremap_nocache(phy, sz) ioremap(phy, sz)
|
#define ioremap_nocache(phy, sz) ioremap(phy, sz)
|
||||||
#define ioremap_wc(phy, sz) ioremap(phy, sz)
|
#define ioremap_wc(phy, sz) ioremap(phy, sz)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#define clear_page(paddr) memset((paddr), 0, PAGE_SIZE)
|
#define clear_page(paddr) memset((paddr), 0, PAGE_SIZE)
|
||||||
|
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
|
||||||
#define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
|
#define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
|
||||||
|
|
||||||
struct vm_area_struct;
|
struct vm_area_struct;
|
||||||
|
|||||||
@@ -138,8 +138,10 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_ARC_HAS_PAE40
|
#ifdef CONFIG_ARC_HAS_PAE40
|
||||||
#define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE)
|
#define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE)
|
||||||
|
#define MAX_POSSIBLE_PHYSMEM_BITS 40
|
||||||
#else
|
#else
|
||||||
#define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE)
|
#define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE)
|
||||||
|
#define MAX_POSSIBLE_PHYSMEM_BITS 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
struct sigcontext {
|
struct sigcontext {
|
||||||
struct user_regs_struct regs;
|
struct user_regs_struct regs;
|
||||||
|
struct user_regs_arcv2 v2abi;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _ASM_ARC_SIGCONTEXT_H */
|
#endif /* _ASM_ARC_SIGCONTEXT_H */
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ END(EV_Extension)
|
|||||||
tracesys:
|
tracesys:
|
||||||
; save EFA in case tracer wants the PC of traced task
|
; save EFA in case tracer wants the PC of traced task
|
||||||
; using ERET won't work since next-PC has already committed
|
; using ERET won't work since next-PC has already committed
|
||||||
|
lr r12, [efa]
|
||||||
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
|
||||||
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
|
||||||
|
|
||||||
@@ -168,7 +169,7 @@ tracesys:
|
|||||||
|
|
||||||
; Do the Sys Call as we normally would.
|
; Do the Sys Call as we normally would.
|
||||||
; Validate the Sys Call number
|
; Validate the Sys Call number
|
||||||
cmp r8, NR_syscalls
|
cmp r8, NR_syscalls - 1
|
||||||
mov.hi r0, -ENOSYS
|
mov.hi r0, -ENOSYS
|
||||||
bhi tracesys_exit
|
bhi tracesys_exit
|
||||||
|
|
||||||
@@ -190,6 +191,7 @@ tracesys_exit:
|
|||||||
st r0, [sp, PT_r0] ; sys call return value in pt_regs
|
st r0, [sp, PT_r0] ; sys call return value in pt_regs
|
||||||
|
|
||||||
;POST Sys Call Ptrace Hook
|
;POST Sys Call Ptrace Hook
|
||||||
|
mov r0, sp ; pt_regs needed
|
||||||
bl @syscall_trace_exit
|
bl @syscall_trace_exit
|
||||||
b ret_from_exception ; NOT ret_from_system_call at is saves r0 which
|
b ret_from_exception ; NOT ret_from_system_call at is saves r0 which
|
||||||
; we'd done before calling post hook above
|
; we'd done before calling post hook above
|
||||||
@@ -198,9 +200,15 @@ tracesys_exit:
|
|||||||
; Breakpoint TRAP
|
; Breakpoint TRAP
|
||||||
; ---------------------------------------------
|
; ---------------------------------------------
|
||||||
trap_with_param:
|
trap_with_param:
|
||||||
mov r0, r12 ; EFA in case ptracer/gdb wants stop_pc
|
|
||||||
|
; stop_pc info by gdb needs this info
|
||||||
|
lr r0, [efa]
|
||||||
mov r1, sp
|
mov r1, sp
|
||||||
|
|
||||||
|
; Now that we have read EFA, it is safe to do "fake" rtie
|
||||||
|
; and get out of CPU exception mode
|
||||||
|
FAKE_RET_FROM_EXCPN
|
||||||
|
|
||||||
; Save callee regs in case gdb wants to have a look
|
; Save callee regs in case gdb wants to have a look
|
||||||
; SP will grow up by size of CALLEE Reg-File
|
; SP will grow up by size of CALLEE Reg-File
|
||||||
; NOTE: clobbers r12
|
; NOTE: clobbers r12
|
||||||
@@ -227,10 +235,6 @@ ENTRY(EV_Trap)
|
|||||||
|
|
||||||
EXCEPTION_PROLOGUE
|
EXCEPTION_PROLOGUE
|
||||||
|
|
||||||
lr r12, [efa]
|
|
||||||
|
|
||||||
FAKE_RET_FROM_EXCPN
|
|
||||||
|
|
||||||
;============ TRAP 1 :breakpoints
|
;============ TRAP 1 :breakpoints
|
||||||
; Check ECR for trap with arg (PROLOGUE ensures r9 has ECR)
|
; Check ECR for trap with arg (PROLOGUE ensures r9 has ECR)
|
||||||
bmsk.f 0, r9, 7
|
bmsk.f 0, r9, 7
|
||||||
@@ -238,6 +242,9 @@ ENTRY(EV_Trap)
|
|||||||
|
|
||||||
;============ TRAP (no param): syscall top level
|
;============ TRAP (no param): syscall top level
|
||||||
|
|
||||||
|
; First return from Exception to pure K mode (Exception/IRQs renabled)
|
||||||
|
FAKE_RET_FROM_EXCPN
|
||||||
|
|
||||||
; If syscall tracing ongoing, invoke pre-post-hooks
|
; If syscall tracing ongoing, invoke pre-post-hooks
|
||||||
GET_CURR_THR_INFO_FLAGS r10
|
GET_CURR_THR_INFO_FLAGS r10
|
||||||
btst r10, TIF_SYSCALL_TRACE
|
btst r10, TIF_SYSCALL_TRACE
|
||||||
@@ -246,7 +253,7 @@ ENTRY(EV_Trap)
|
|||||||
;============ Normal syscall case
|
;============ Normal syscall case
|
||||||
|
|
||||||
; syscall num shd not exceed the total system calls avail
|
; syscall num shd not exceed the total system calls avail
|
||||||
cmp r8, NR_syscalls
|
cmp r8, NR_syscalls - 1
|
||||||
mov.hi r0, -ENOSYS
|
mov.hi r0, -ENOSYS
|
||||||
bhi .Lret_from_system_call
|
bhi .Lret_from_system_call
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,41 @@ struct rt_sigframe {
|
|||||||
unsigned int sigret_magic;
|
unsigned int sigret_magic;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
|
struct user_regs_arcv2 v2abi;
|
||||||
|
|
||||||
|
v2abi.r30 = regs->r30;
|
||||||
|
#ifdef CONFIG_ARC_HAS_ACCL_REGS
|
||||||
|
v2abi.r58 = regs->r58;
|
||||||
|
v2abi.r59 = regs->r59;
|
||||||
|
#else
|
||||||
|
v2abi.r58 = v2abi.r59 = 0;
|
||||||
|
#endif
|
||||||
|
err = __copy_to_user(&mctx->v2abi, &v2abi, sizeof(v2abi));
|
||||||
|
#endif
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int restore_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
|
struct user_regs_arcv2 v2abi;
|
||||||
|
|
||||||
|
err = __copy_from_user(&v2abi, &mctx->v2abi, sizeof(v2abi));
|
||||||
|
|
||||||
|
regs->r30 = v2abi.r30;
|
||||||
|
#ifdef CONFIG_ARC_HAS_ACCL_REGS
|
||||||
|
regs->r58 = v2abi.r58;
|
||||||
|
regs->r59 = v2abi.r59;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
|
stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
|
||||||
sigset_t *set)
|
sigset_t *set)
|
||||||
@@ -97,9 +132,13 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
|
|||||||
|
|
||||||
err = __copy_to_user(&(sf->uc.uc_mcontext.regs.scratch), &uregs.scratch,
|
err = __copy_to_user(&(sf->uc.uc_mcontext.regs.scratch), &uregs.scratch,
|
||||||
sizeof(sf->uc.uc_mcontext.regs.scratch));
|
sizeof(sf->uc.uc_mcontext.regs.scratch));
|
||||||
|
|
||||||
|
if (is_isa_arcv2())
|
||||||
|
err |= save_arcv2_regs(&(sf->uc.uc_mcontext), regs);
|
||||||
|
|
||||||
err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t));
|
err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t));
|
||||||
|
|
||||||
return err;
|
return err ? -EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
|
static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
|
||||||
@@ -112,8 +151,12 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
|
|||||||
err |= __copy_from_user(&uregs.scratch,
|
err |= __copy_from_user(&uregs.scratch,
|
||||||
&(sf->uc.uc_mcontext.regs.scratch),
|
&(sf->uc.uc_mcontext.regs.scratch),
|
||||||
sizeof(sf->uc.uc_mcontext.regs.scratch));
|
sizeof(sf->uc.uc_mcontext.regs.scratch));
|
||||||
|
|
||||||
|
if (is_isa_arcv2())
|
||||||
|
err |= restore_arcv2_regs(&(sf->uc.uc_mcontext), regs);
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return -EFAULT;
|
||||||
|
|
||||||
set_current_blocked(&set);
|
set_current_blocked(&set);
|
||||||
regs->bta = uregs.scratch.bta;
|
regs->bta = uregs.scratch.bta;
|
||||||
|
|||||||
@@ -41,15 +41,15 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
|
|
||||||
static void seed_unwind_frame_info(struct task_struct *tsk,
|
static int
|
||||||
struct pt_regs *regs,
|
seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
|
||||||
struct unwind_frame_info *frame_info)
|
struct unwind_frame_info *frame_info)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* synchronous unwinding (e.g. dump_stack)
|
* synchronous unwinding (e.g. dump_stack)
|
||||||
* - uses current values of SP and friends
|
* - uses current values of SP and friends
|
||||||
*/
|
*/
|
||||||
if (tsk == NULL && regs == NULL) {
|
if (regs == NULL && (tsk == NULL || tsk == current)) {
|
||||||
unsigned long fp, sp, blink, ret;
|
unsigned long fp, sp, blink, ret;
|
||||||
frame_info->task = current;
|
frame_info->task = current;
|
||||||
|
|
||||||
@@ -68,11 +68,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
|||||||
frame_info->call_frame = 0;
|
frame_info->call_frame = 0;
|
||||||
} else if (regs == NULL) {
|
} else if (regs == NULL) {
|
||||||
/*
|
/*
|
||||||
* Asynchronous unwinding of sleeping task
|
* Asynchronous unwinding of a likely sleeping task
|
||||||
* - Gets SP etc from task's pt_regs (saved bottom of kernel
|
* - first ensure it is actually sleeping
|
||||||
* mode stack of task)
|
* - if so, it will be in __switch_to, kernel mode SP of task
|
||||||
|
* is safe-kept and BLINK at a well known location in there
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (tsk->state == TASK_RUNNING)
|
||||||
|
return -1;
|
||||||
|
|
||||||
frame_info->task = tsk;
|
frame_info->task = tsk;
|
||||||
|
|
||||||
frame_info->regs.r27 = TSK_K_FP(tsk);
|
frame_info->regs.r27 = TSK_K_FP(tsk);
|
||||||
@@ -106,6 +110,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
|||||||
frame_info->regs.r63 = regs->ret;
|
frame_info->regs.r63 = regs->ret;
|
||||||
frame_info->call_frame = 0;
|
frame_info->call_frame = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -115,11 +121,12 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
|||||||
int (*consumer_fn) (unsigned int, void *), void *arg)
|
int (*consumer_fn) (unsigned int, void *), void *arg)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
int ret = 0;
|
int ret = 0, cnt = 0;
|
||||||
unsigned int address;
|
unsigned int address;
|
||||||
struct unwind_frame_info frame_info;
|
struct unwind_frame_info frame_info;
|
||||||
|
|
||||||
seed_unwind_frame_info(tsk, regs, &frame_info);
|
if (seed_unwind_frame_info(tsk, regs, &frame_info))
|
||||||
|
return 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
address = UNW_PC(&frame_info);
|
address = UNW_PC(&frame_info);
|
||||||
@@ -135,6 +142,11 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
frame_info.regs.r63 = frame_info.regs.r31;
|
frame_info.regs.r63 = frame_info.regs.r31;
|
||||||
|
|
||||||
|
if (cnt++ > 128) {
|
||||||
|
printk("unwinder looping too long, aborting !\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return address; /* return the last address it saw */
|
return address; /* return the last address it saw */
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ SECTIONS
|
|||||||
CPUIDLE_TEXT
|
CPUIDLE_TEXT
|
||||||
LOCK_TEXT
|
LOCK_TEXT
|
||||||
KPROBES_TEXT
|
KPROBES_TEXT
|
||||||
|
IRQENTRY_TEXT
|
||||||
|
SOFTIRQENTRY_TEXT
|
||||||
*(.fixup)
|
*(.fixup)
|
||||||
*(.gnu.warning)
|
*(.gnu.warning)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1118,7 +1118,7 @@ void clear_user_page(void *to, unsigned long u_vaddr, struct page *page)
|
|||||||
clear_page(to);
|
clear_page(to);
|
||||||
clear_bit(PG_dc_clean, &page->flags);
|
clear_bit(PG_dc_clean, &page->flags);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(clear_user_page);
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Explicit Cache flush request from user space via syscall
|
* Explicit Cache flush request from user space via syscall
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
|
|||||||
EXPORT_SYMBOL(ioremap_prot);
|
EXPORT_SYMBOL(ioremap_prot);
|
||||||
|
|
||||||
|
|
||||||
void iounmap(const void __iomem *addr)
|
void iounmap(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
/* weird double cast to handle phys_addr_t > 32 bits */
|
/* weird double cast to handle phys_addr_t > 32 bits */
|
||||||
if (arc_uncached_addr_space((phys_addr_t)(u32)addr))
|
if (arc_uncached_addr_space((phys_addr_t)(u32)addr))
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)
|
#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)
|
||||||
#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)
|
#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)
|
||||||
#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080)
|
#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080)
|
||||||
#define CTOP_AUX_IACK (CTOP_AUX_BASE + 0x088)
|
|
||||||
#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)
|
#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)
|
||||||
#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
|
#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
|
||||||
|
|
||||||
|
|||||||
@@ -11,4 +11,5 @@ menuconfig ARC_SOC_HSDK
|
|||||||
select ARC_HAS_ACCL_REGS
|
select ARC_HAS_ACCL_REGS
|
||||||
select ARC_IRQ_NO_AUTOSAVE
|
select ARC_IRQ_NO_AUTOSAVE
|
||||||
select CLK_HSDK
|
select CLK_HSDK
|
||||||
|
select RESET_CONTROLLER
|
||||||
select RESET_HSDK
|
select RESET_HSDK
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ config ARM
|
|||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
select ARCH_CLOCKSOURCE_DATA
|
select ARCH_CLOCKSOURCE_DATA
|
||||||
|
select ARCH_HAS_CPU_FINALIZE_INIT if MMU
|
||||||
select ARCH_HAS_DEBUG_VIRTUAL
|
select ARCH_HAS_DEBUG_VIRTUAL
|
||||||
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
||||||
select ARCH_HAS_ELF_RANDOMIZE
|
select ARCH_HAS_ELF_RANDOMIZE
|
||||||
@@ -64,7 +65,7 @@ config ARM
|
|||||||
select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU
|
select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU
|
||||||
select HAVE_EXIT_THREAD
|
select HAVE_EXIT_THREAD
|
||||||
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
||||||
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
|
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL && !CC_IS_CLANG)
|
||||||
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
|
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
|
||||||
select HAVE_FUTEX_CMPXCHG if FUTEX
|
select HAVE_FUTEX_CMPXCHG if FUTEX
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
@@ -635,7 +636,9 @@ config ARCH_S3C24XX
|
|||||||
select HAVE_S3C_RTC if RTC_CLASS
|
select HAVE_S3C_RTC if RTC_CLASS
|
||||||
select MULTI_IRQ_HANDLER
|
select MULTI_IRQ_HANDLER
|
||||||
select NEED_MACH_IO_H
|
select NEED_MACH_IO_H
|
||||||
|
select S3C2410_WATCHDOG
|
||||||
select SAMSUNG_ATAGS
|
select SAMSUNG_ATAGS
|
||||||
|
select WATCHDOG
|
||||||
help
|
help
|
||||||
Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
|
Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
|
||||||
and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
|
and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
|
||||||
@@ -2051,7 +2054,6 @@ config CMDLINE
|
|||||||
choice
|
choice
|
||||||
prompt "Kernel command line type" if CMDLINE != ""
|
prompt "Kernel command line type" if CMDLINE != ""
|
||||||
default CMDLINE_FROM_BOOTLOADER
|
default CMDLINE_FROM_BOOTLOADER
|
||||||
depends on ATAGS
|
|
||||||
|
|
||||||
config CMDLINE_FROM_BOOTLOADER
|
config CMDLINE_FROM_BOOTLOADER
|
||||||
bool "Use bootloader kernel arguments if available"
|
bool "Use bootloader kernel arguments if available"
|
||||||
|
|||||||
@@ -16,30 +16,42 @@ config ARM_PTDUMP
|
|||||||
kernel.
|
kernel.
|
||||||
If in doubt, say "N"
|
If in doubt, say "N"
|
||||||
|
|
||||||
# RMK wants arm kernels compiled with frame pointers or stack unwinding.
|
choice
|
||||||
# If you know what you are doing and are willing to live without stack
|
prompt "Choose kernel unwinder"
|
||||||
# traces, you can get a slightly smaller kernel by setting this option to
|
default UNWINDER_ARM if AEABI
|
||||||
# n, but then RMK will have to kill you ;).
|
default UNWINDER_FRAME_POINTER if !AEABI
|
||||||
config FRAME_POINTER
|
|
||||||
bool
|
|
||||||
depends on !THUMB2_KERNEL
|
|
||||||
default y if !ARM_UNWIND || FUNCTION_GRAPH_TRACER
|
|
||||||
help
|
help
|
||||||
If you say N here, the resulting kernel will be slightly smaller and
|
This determines which method will be used for unwinding kernel stack
|
||||||
faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled,
|
traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
|
||||||
when a problem occurs with the kernel, the information that is
|
livepatch, lockdep, and more.
|
||||||
reported is severely limited.
|
|
||||||
|
|
||||||
config ARM_UNWIND
|
config UNWINDER_FRAME_POINTER
|
||||||
bool "Enable stack unwinding support (EXPERIMENTAL)"
|
bool "Frame pointer unwinder"
|
||||||
depends on AEABI
|
depends on !THUMB2_KERNEL && !CC_IS_CLANG
|
||||||
default y
|
select ARCH_WANT_FRAME_POINTERS
|
||||||
|
select FRAME_POINTER
|
||||||
|
help
|
||||||
|
This option enables the frame pointer unwinder for unwinding
|
||||||
|
kernel stack traces.
|
||||||
|
|
||||||
|
config UNWINDER_ARM
|
||||||
|
bool "ARM EABI stack unwinder"
|
||||||
|
depends on AEABI && !FUNCTION_GRAPH_TRACER
|
||||||
|
select ARM_UNWIND
|
||||||
help
|
help
|
||||||
This option enables stack unwinding support in the kernel
|
This option enables stack unwinding support in the kernel
|
||||||
using the information automatically generated by the
|
using the information automatically generated by the
|
||||||
compiler. The resulting kernel image is slightly bigger but
|
compiler. The resulting kernel image is slightly bigger but
|
||||||
the performance is not affected. Currently, this feature
|
the performance is not affected. Currently, this feature
|
||||||
only works with EABI compilers. If unsure say Y.
|
only works with EABI compilers.
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config ARM_UNWIND
|
||||||
|
bool
|
||||||
|
|
||||||
|
config FRAME_POINTER
|
||||||
|
bool
|
||||||
|
|
||||||
config OLD_MCOUNT
|
config OLD_MCOUNT
|
||||||
bool
|
bool
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
|
|||||||
export DTC_FLAGS := -@
|
export DTC_FLAGS := -@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LDFLAGS_vmlinux :=-p --no-undefined -X --pic-veneer
|
LDFLAGS_vmlinux := --no-undefined -X --pic-veneer
|
||||||
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
||||||
LDFLAGS_vmlinux += --be8
|
LDFLAGS_vmlinux += --be8
|
||||||
LDFLAGS_MODULE += --be8
|
LDFLAGS_MODULE += --be8
|
||||||
@@ -76,15 +76,15 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra)
|
|||||||
# Note that GCC does not numerically define an architecture version
|
# Note that GCC does not numerically define an architecture version
|
||||||
# macro, but instead defines a whole series of macros which makes
|
# macro, but instead defines a whole series of macros which makes
|
||||||
# testing for a specific architecture or later rather impossible.
|
# testing for a specific architecture or later rather impossible.
|
||||||
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
|
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m
|
||||||
arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
|
arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a
|
||||||
arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
|
arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6
|
||||||
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
||||||
# always available in ARMv7
|
# always available in ARMv7
|
||||||
ifeq ($(CONFIG_CPU_32v6),y)
|
ifeq ($(CONFIG_CPU_32v6),y)
|
||||||
arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
|
arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k
|
||||||
endif
|
endif
|
||||||
arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
|
arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te
|
||||||
arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t
|
arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t
|
||||||
arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4
|
arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4
|
||||||
arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3
|
arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3
|
||||||
@@ -98,7 +98,7 @@ tune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi
|
|||||||
tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi
|
tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi
|
||||||
tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi
|
||||||
tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi
|
||||||
tune-$(CONFIG_CPU_ARM946E) =$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
|
tune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e
|
||||||
tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi
|
||||||
tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi
|
||||||
tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi
|
||||||
@@ -106,11 +106,11 @@ tune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi
|
|||||||
tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi
|
tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi
|
||||||
tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110
|
tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110
|
||||||
tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100
|
tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100
|
||||||
tune-$(CONFIG_CPU_XSCALE) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
|
tune-$(CONFIG_CPU_XSCALE) =-mtune=xscale
|
||||||
tune-$(CONFIG_CPU_XSC3) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
|
tune-$(CONFIG_CPU_XSC3) =-mtune=xscale
|
||||||
tune-$(CONFIG_CPU_FEROCEON) =$(call cc-option,-mtune=marvell-f,-mtune=xscale)
|
tune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale
|
||||||
tune-$(CONFIG_CPU_V6) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
|
tune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s
|
||||||
tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
|
tune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s
|
||||||
|
|
||||||
# Evaluate tune cc-option calls now
|
# Evaluate tune cc-option calls now
|
||||||
tune-y := $(tune-y)
|
tune-y := $(tune-y)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
GCOV_PROFILE := n
|
GCOV_PROFILE := n
|
||||||
|
|
||||||
LDFLAGS_bootp :=-p --no-undefined -X \
|
LDFLAGS_bootp := --no-undefined -X \
|
||||||
--defsym initrd_phys=$(INITRD_PHYS) \
|
--defsym initrd_phys=$(INITRD_PHYS) \
|
||||||
--defsym params_phys=$(PARAMS_PHYS) -T
|
--defsym params_phys=$(PARAMS_PHYS) -T
|
||||||
AFLAGS_initrd.o :=-DINITRD=\"$(INITRD)\"
|
AFLAGS_initrd.o :=-DINITRD=\"$(INITRD)\"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
* size immediately following the kernel, we could build this into
|
* size immediately following the kernel, we could build this into
|
||||||
* a binary blob, and concatenate the zImage using the cat command.
|
* a binary blob, and concatenate the zImage using the cat command.
|
||||||
*/
|
*/
|
||||||
.section .start,#alloc,#execinstr
|
.section .start, "ax"
|
||||||
.type _start, #function
|
.type _start, #function
|
||||||
.globl _start
|
.globl _start
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ $(addprefix $(obj)/,$(libfdt_objs) atags_to_fdt.o): \
|
|||||||
$(addprefix $(obj)/,$(libfdt_hdrs))
|
$(addprefix $(obj)/,$(libfdt_hdrs))
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARM_ATAG_DTB_COMPAT),y)
|
ifeq ($(CONFIG_ARM_ATAG_DTB_COMPAT),y)
|
||||||
|
CFLAGS_REMOVE_atags_to_fdt.o += -Wframe-larger-than=${CONFIG_FRAME_WARN}
|
||||||
|
CFLAGS_atags_to_fdt.o += -Wframe-larger-than=1280
|
||||||
OBJS += $(libfdt_objs) atags_to_fdt.o
|
OBJS += $(libfdt_objs) atags_to_fdt.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -127,8 +129,6 @@ endif
|
|||||||
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
||||||
LDFLAGS_vmlinux += --be8
|
LDFLAGS_vmlinux += --be8
|
||||||
endif
|
endif
|
||||||
# ?
|
|
||||||
LDFLAGS_vmlinux += -p
|
|
||||||
# Report unresolved symbol references
|
# Report unresolved symbol references
|
||||||
LDFLAGS_vmlinux += --no-undefined
|
LDFLAGS_vmlinux += --no-undefined
|
||||||
# Delete all temporary local symbols
|
# Delete all temporary local symbols
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* Author: Nicolas Pitre
|
* Author: Nicolas Pitre
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.section ".start", #alloc, #execinstr
|
.section ".start", "ax"
|
||||||
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||||
orr r0, r0, #(1 << 7) @ enable big endian mode
|
orr r0, r0, #(1 << 7) @ enable big endian mode
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ extern int memcmp(const void *cs, const void *ct, size_t count);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_XZ
|
#ifdef CONFIG_KERNEL_XZ
|
||||||
|
/* Prevent KASAN override of string helpers in decompressor */
|
||||||
|
#undef memmove
|
||||||
#define memmove memmove
|
#define memmove memmove
|
||||||
|
#undef memcpy
|
||||||
#define memcpy memcpy
|
#define memcpy memcpy
|
||||||
#include "../../../../lib/decompress_unxz.c"
|
#include "../../../../lib/decompress_unxz.c"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.section ".start", #alloc, #execinstr
|
.section ".start", "ax"
|
||||||
/*
|
/*
|
||||||
* sort out different calling conventions
|
* sort out different calling conventions
|
||||||
*/
|
*/
|
||||||
@@ -1090,9 +1090,9 @@ __armv4_mmu_cache_off:
|
|||||||
__armv7_mmu_cache_off:
|
__armv7_mmu_cache_off:
|
||||||
mrc p15, 0, r0, c1, c0
|
mrc p15, 0, r0, c1, c0
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
bic r0, r0, #0x000d
|
bic r0, r0, #0x0005
|
||||||
#else
|
#else
|
||||||
bic r0, r0, #0x000c
|
bic r0, r0, #0x0004
|
||||||
#endif
|
#endif
|
||||||
mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
|
mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
|
||||||
mov r12, lr
|
mov r12, lr
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
.section .piggydata,#alloc
|
.section .piggydata, "a"
|
||||||
.globl input_data
|
.globl input_data
|
||||||
input_data:
|
input_data:
|
||||||
.incbin "arch/arm/boot/compressed/piggy_data"
|
.incbin "arch/arm/boot/compressed/piggy_data"
|
||||||
|
|||||||
@@ -552,7 +552,7 @@ status = "okay";
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&spi0_pins>;
|
pinctrl-0 = <&spi0_pins>;
|
||||||
ti,pindir-d0-out-d1-in = <1>;
|
ti,pindir-d0-out-d1-in;
|
||||||
/* WLS1271 WiFi */
|
/* WLS1271 WiFi */
|
||||||
wlcore: wlcore@1 {
|
wlcore: wlcore@1 {
|
||||||
compatible = "ti,wl1271";
|
compatible = "ti,wl1271";
|
||||||
|
|||||||
@@ -15,22 +15,20 @@
|
|||||||
compatible = "phytec,am335x-pcm-953", "phytec,am335x-phycore-som", "ti,am33xx";
|
compatible = "phytec,am335x-pcm-953", "phytec,am335x-phycore-som", "ti,am33xx";
|
||||||
|
|
||||||
/* Power */
|
/* Power */
|
||||||
regulators {
|
vcc3v3: fixedregulator1 {
|
||||||
vcc3v3: fixedregulator@1 {
|
compatible = "regulator-fixed";
|
||||||
compatible = "regulator-fixed";
|
regulator-name = "vcc3v3";
|
||||||
regulator-name = "vcc3v3";
|
regulator-min-microvolt = <3300000>;
|
||||||
regulator-min-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-boot-on;
|
||||||
regulator-boot-on;
|
};
|
||||||
};
|
|
||||||
|
|
||||||
vcc1v8: fixedregulator@2 {
|
vcc1v8: fixedregulator2 {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vcc1v8";
|
regulator-name = "vcc1v8";
|
||||||
regulator-min-microvolt = <1800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <1800000>;
|
regulator-max-microvolt = <1800000>;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* User IO */
|
/* User IO */
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
ethernet1 = &cpsw_emac1;
|
ethernet1 = &cpsw_emac1;
|
||||||
spi0 = &spi0;
|
spi0 = &spi0;
|
||||||
spi1 = &spi1;
|
spi1 = &spi1;
|
||||||
|
mmc0 = &mmc1;
|
||||||
|
mmc1 = &mmc2;
|
||||||
|
mmc2 = &mmc3;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
|||||||
@@ -411,7 +411,7 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&i2c0_pins>;
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <100000>;
|
||||||
|
|
||||||
tps65218: tps65218@24 {
|
tps65218: tps65218@24 {
|
||||||
reg = <0x24>;
|
reg = <0x24>;
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x80000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -621,7 +621,7 @@
|
|||||||
|
|
||||||
pcie1: pcie@2,0 {
|
pcie1: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@2,0 {
|
pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@3,0 {
|
pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -55,6 +55,12 @@
|
|||||||
stdout-path = &uart0;
|
stdout-path = &uart0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = ð0;
|
||||||
|
ethernet1 = ð1;
|
||||||
|
ethernet2 = ð2;
|
||||||
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0x00000000 0x40000000>; /* 1024 MB */
|
reg = <0x00000000 0x40000000>; /* 1024 MB */
|
||||||
@@ -269,6 +275,7 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22";
|
compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
|
marvell,reg-init = <3 18 0 0x4985>;
|
||||||
|
|
||||||
/* irq is connected to &pcawan pin 7 */
|
/* irq is connected to &pcawan pin 7 */
|
||||||
};
|
};
|
||||||
@@ -323,7 +330,17 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* port 6 is connected to eth0 */
|
ports@6 {
|
||||||
|
reg = <6>;
|
||||||
|
label = "cpu";
|
||||||
|
ethernet = <ð0>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
|
||||||
|
fixed-link {
|
||||||
|
speed = <1000>;
|
||||||
|
full-duplex;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -339,7 +356,7 @@
|
|||||||
marvell,function = "spi0";
|
marvell,function = "spi0";
|
||||||
};
|
};
|
||||||
|
|
||||||
spi0cs1_pins: spi0cs1-pins {
|
spi0cs2_pins: spi0cs2-pins {
|
||||||
marvell,pins = "mpp26";
|
marvell,pins = "mpp26";
|
||||||
marvell,function = "spi0";
|
marvell,function = "spi0";
|
||||||
};
|
};
|
||||||
@@ -374,7 +391,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* MISO, MOSI, SCLK and CS1 are routed to pin header CN11 */
|
/* MISO, MOSI, SCLK and CS2 are routed to pin header CN11 */
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart0 {
|
&uart0 {
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie3: pcie@3,0 {
|
pcie3: pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
*/
|
*/
|
||||||
pcie4: pcie@4,0 {
|
pcie4: pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -493,7 +493,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@2,0 {
|
pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -512,7 +512,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@3,0 {
|
pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -534,7 +534,7 @@
|
|||||||
*/
|
*/
|
||||||
pcie@4,0 {
|
pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -303,11 +303,6 @@
|
|||||||
reg = <0x11000 0x100>;
|
reg = <0x11000 0x100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&i2c1 {
|
|
||||||
compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
|
|
||||||
reg = <0x11100 0x100>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&mpic {
|
&mpic {
|
||||||
reg = <0x20a00 0x2d0>, <0x21070 0x58>;
|
reg = <0x20a00 0x2d0>, <0x21070 0x58>;
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user