Commit 563c4f85 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'sched/rt' into sched/core, to pick up -rt changes

Pick up the first couple of patches working towards PREEMPT_RT.
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 4adcdcea 09c7e8b2
...@@ -142,3 +142,6 @@ x509.genkey ...@@ -142,3 +142,6 @@ x509.genkey
# Kdevelop4 # Kdevelop4
*.kdev4 *.kdev4
# Clang's compilation database file
/compile_commands.json
...@@ -98,6 +98,7 @@ Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com> ...@@ -98,6 +98,7 @@ Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com> Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk> <javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
Jean Tourrilhes <jt@hpl.hp.com> Jean Tourrilhes <jt@hpl.hp.com>
<jean-philippe@linaro.org> <jean-philippe.brucker@arm.com>
Jeff Garzik <jgarzik@pretzel.yyz.us> Jeff Garzik <jgarzik@pretzel.yyz.us>
Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com> Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com>
Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net> Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net>
...@@ -116,6 +117,7 @@ John Stultz <johnstul@us.ibm.com> ...@@ -116,6 +117,7 @@ John Stultz <johnstul@us.ibm.com>
Juha Yrjola <at solidboot.com> Juha Yrjola <at solidboot.com>
Juha Yrjola <juha.yrjola@nokia.com> Juha Yrjola <juha.yrjola@nokia.com>
Juha Yrjola <juha.yrjola@solidboot.com> Juha Yrjola <juha.yrjola@solidboot.com>
Julien Thierry <julien.thierry.kdev@gmail.com> <julien.thierry@arm.com>
Kay Sievers <kay.sievers@vrfy.org> Kay Sievers <kay.sievers@vrfy.org>
Kenneth W Chen <kenneth.w.chen@intel.com> Kenneth W Chen <kenneth.w.chen@intel.com>
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
...@@ -132,6 +134,7 @@ Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch> ...@@ -132,6 +134,7 @@ Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org> Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org>
Li Yang <leoyang.li@nxp.com> <leoli@freescale.com> Li Yang <leoyang.li@nxp.com> <leoli@freescale.com>
Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com> Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com>
Marc Zyngier <maz@kernel.org> <marc.zyngier@arm.com>
Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com> Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com>
Mark Brown <broonie@sirena.org.uk> Mark Brown <broonie@sirena.org.uk>
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com> Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
......
...@@ -403,7 +403,7 @@ That is, the recovery API only requires that: ...@@ -403,7 +403,7 @@ That is, the recovery API only requires that:
.. note:: .. note::
Implementation details for the powerpc platform are discussed in Implementation details for the powerpc platform are discussed in
the file Documentation/powerpc/eeh-pci-error-recovery.txt the file Documentation/powerpc/eeh-pci-error-recovery.rst
As of this writing, there is a growing list of device drivers with As of this writing, there is a growing list of device drivers with
patches implementing error recovery. Not all of these patches are in patches implementing error recovery. Not all of these patches are in
...@@ -422,3 +422,6 @@ That is, the recovery API only requires that: ...@@ -422,3 +422,6 @@ That is, the recovery API only requires that:
- drivers/net/cxgb3 - drivers/net/cxgb3
- drivers/net/s2io.c - drivers/net/s2io.c
- drivers/net/qlge - drivers/net/qlge
The End
-------
Using hlist_nulls to protect read-mostly linked lists and Using hlist_nulls to protect read-mostly linked lists and
objects using SLAB_TYPESAFE_BY_RCU allocations. objects using SLAB_TYPESAFE_BY_RCU allocations.
Please read the basics in Documentation/RCU/listRCU.txt Please read the basics in Documentation/RCU/listRCU.rst
Using special makers (called 'nulls') is a convenient way Using special makers (called 'nulls') is a convenient way
to solve following problem : to solve following problem :
......
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel User Documentation'
tags.add("subproject")
latex_documents = [
('index', 'linux-user.tex', 'Linux Kernel User Documentation',
'The kernel development community', 'manual'),
]
...@@ -2545,7 +2545,7 @@ ...@@ -2545,7 +2545,7 @@
mem_encrypt=on: Activate SME mem_encrypt=on: Activate SME
mem_encrypt=off: Do not activate SME mem_encrypt=off: Do not activate SME
Refer to Documentation/virtual/kvm/amd-memory-encryption.rst Refer to Documentation/virt/kvm/amd-memory-encryption.rst
for details on when memory encryption can be activated. for details on when memory encryption can be activated.
mem_sleep_default= [SUSPEND] Default system suspend mode: mem_sleep_default= [SUSPEND] Default system suspend mode:
......
...@@ -53,7 +53,7 @@ disabled, there is ``khugepaged`` daemon that scans memory and ...@@ -53,7 +53,7 @@ disabled, there is ``khugepaged`` daemon that scans memory and
collapses sequences of basic pages into huge pages. collapses sequences of basic pages into huge pages.
The THP behaviour is controlled via :ref:`sysfs <thp_sysfs>` The THP behaviour is controlled via :ref:`sysfs <thp_sysfs>`
interface and using madivse(2) and prctl(2) system calls. interface and using madvise(2) and prctl(2) system calls.
Transparent Hugepage Support maximizes the usefulness of free memory Transparent Hugepage Support maximizes the usefulness of free memory
if compared to the reservation approach of hugetlbfs by allowing all if compared to the reservation approach of hugetlbfs by allowing all
......
...@@ -16,6 +16,8 @@ import sys ...@@ -16,6 +16,8 @@ import sys
import os import os
import sphinx import sphinx
from subprocess import check_output
# Get Sphinx version # Get Sphinx version
major, minor, patch = sphinx.version_info[:3] major, minor, patch = sphinx.version_info[:3]
...@@ -276,10 +278,21 @@ latex_elements = { ...@@ -276,10 +278,21 @@ latex_elements = {
\\setsansfont{DejaVu Sans} \\setsansfont{DejaVu Sans}
\\setromanfont{DejaVu Serif} \\setromanfont{DejaVu Serif}
\\setmonofont{DejaVu Sans Mono} \\setmonofont{DejaVu Sans Mono}
''' '''
} }
# At least one book (translations) may have Asian characters
# with are only displayed if xeCJK is used
cjk_cmd = check_output(['fc-list', '--format="%{family[0]}\n"']).decode('utf-8', 'ignore')
if cjk_cmd.find("Noto Sans CJK SC") >= 0:
print ("enabling CJK for LaTeX builder")
latex_elements['preamble'] += '''
% This is needed for translations
\\usepackage{xeCJK}
\\setCJKmainfont{Noto Sans CJK SC}
'''
# Fix reference escape troubles with Sphinx 1.4.x # Fix reference escape troubles with Sphinx 1.4.x
if major == 1 and minor > 3: if major == 1 and minor > 3:
latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n' latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
...@@ -410,6 +423,21 @@ latex_documents = [ ...@@ -410,6 +423,21 @@ latex_documents = [
'The kernel development community', 'manual'), 'The kernel development community', 'manual'),
] ]
# Add all other index files from Documentation/ subdirectories
for fn in os.listdir('.'):
doc = os.path.join(fn, "index")
if os.path.exists(doc + ".rst"):
has = False
for l in latex_documents:
if l[0] == doc:
has = True
break
if not has:
latex_documents.append((doc, fn + '.tex',
'Linux %s Documentation' % fn.capitalize(),
'The kernel development community',
'manual'))
# The name of an image file (relative to this directory) to place at the top of # The name of an image file (relative to this directory) to place at the top of
# the title page. # the title page.
#latex_logo = None #latex_logo = None
......
# -*- coding: utf-8; mode: python -*-
project = "Core-API Documentation"
tags.add("subproject")
latex_documents = [
('index', 'core-api.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel Crypto API'
tags.add("subproject")
latex_documents = [
('index', 'crypto-api.tex', 'Linux Kernel Crypto API manual',
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Development tools for the kernel"
tags.add("subproject")
latex_documents = [
('index', 'dev-tools.tex', project,
'The kernel development community', 'manual'),
]
...@@ -703,4 +703,4 @@ cpus { ...@@ -703,4 +703,4 @@ cpus {
https://www.devicetree.org/specifications/ https://www.devicetree.org/specifications/
[6] ARM Linux Kernel documentation - Booting AArch64 Linux [6] ARM Linux Kernel documentation - Booting AArch64 Linux
Documentation/arm64/booting.txt Documentation/arm64/booting.rst
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/arm/shmobile.yaml# $id: http://devicetree.org/schemas/arm/renesas.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Renesas SH-Mobile, R-Mobile, and R-Car Platform Device Tree Bindings title: Renesas SH-Mobile, R-Mobile, and R-Car Platform Device Tree Bindings
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/arm/milbeaut.yaml# $id: http://devicetree.org/schemas/arm/socionext/milbeaut.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Milbeaut platforms device tree bindings title: Milbeaut platforms device tree bindings
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/arm/ti/davinci.yaml# $id: http://devicetree.org/schemas/arm/ti/ti,davinci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Texas Instruments DaVinci Platforms Device Tree Bindings title: Texas Instruments DaVinci Platforms Device Tree Bindings
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/phy/allwinner,sun4i-a10-ccu.yaml# $id: http://devicetree.org/schemas/clock/allwinner,sun4i-a10-ccu.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Allwinner Clock Control Unit Device Tree Bindings title: Allwinner Clock Control Unit Device Tree Bindings
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Copyright 2019 Linaro Ltd. # Copyright 2019 Linaro Ltd.
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/firmware/intel-ixp4xx-network-processing-engine.yaml#" $id: "http://devicetree.org/schemas/firmware/intel,ixp4xx-network-processing-engine.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: "http://devicetree.org/meta-schemas/core.yaml#"
title: Intel IXP4xx Network Processing Engine title: Intel IXP4xx Network Processing Engine
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/iio/accelerometers/adi,adxl345.yaml# $id: http://devicetree.org/schemas/iio/accel/adi,adxl345.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Analog Devices ADXL345/ADXL375 3-Axis Digital Accelerometers title: Analog Devices ADXL345/ADXL375 3-Axis Digital Accelerometers
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/iio/accelerometers/adi,adxl372.yaml# $id: http://devicetree.org/schemas/iio/accel/adi,adxl372.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Analog Devices ADXL372 3-Axis, +/-(200g) Digital Accelerometer title: Analog Devices ADXL372 3-Axis, +/-(200g) Digital Accelerometer
......
...@@ -5,21 +5,19 @@ Required properties: ...@@ -5,21 +5,19 @@ Required properties:
- compatible: should be "amazon,al-fic" - compatible: should be "amazon,al-fic"
- reg: physical base address and size of the registers - reg: physical base address and size of the registers
- interrupt-controller: identifies the node as an interrupt controller - interrupt-controller: identifies the node as an interrupt controller
- #interrupt-cells: must be 2. - #interrupt-cells : must be 2. Specifies the number of cells needed to encode
First cell defines the index of the interrupt within the controller. an interrupt source. Supported trigger types are low-to-high edge
Second cell is used to specify the trigger type and must be one of the triggered and active high level-sensitive.
following:
- bits[3:0] trigger type and level flags
1 = low-to-high edge triggered
4 = active high level-sensitive
- interrupt-parent: specifies the parent interrupt controller.
- interrupts: describes which input line in the interrupt parent, this - interrupts: describes which input line in the interrupt parent, this
fic's output is connected to. This field property depends on the parent's fic's output is connected to. This field property depends on the parent's
binding binding
Please refer to interrupts.txt in this directory for details of the common
Interrupt Controllers bindings used by client devices.
Example: Example:
amazon_fic: interrupt-controller@0xfd8a8500 { amazon_fic: interrupt-controller@fd8a8500 {
compatible = "amazon,al-fic"; compatible = "amazon,al-fic";
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>; #interrupt-cells = <2>;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Copyright 2018 Linaro Ltd. # Copyright 2018 Linaro Ltd.
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/interrupt/intel-ixp4xx-interrupt.yaml#" $id: "http://devicetree.org/schemas/interrupt-controller/intel,ixp4xx-interrupt.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: "http://devicetree.org/meta-schemas/core.yaml#"
title: Intel IXP4xx XScale Networking Processors Interrupt Controller title: Intel IXP4xx XScale Networking Processors Interrupt Controller
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Copyright 2019 Linaro Ltd. # Copyright 2019 Linaro Ltd.
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/misc/intel-ixp4xx-ahb-queue-manager.yaml#" $id: "http://devicetree.org/schemas/misc/intel,ixp4xx-ahb-queue-manager.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: "http://devicetree.org/meta-schemas/core.yaml#"
title: Intel IXP4xx AHB Queue Manager title: Intel IXP4xx AHB Queue Manager
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/net/allwinner,sun8i-a83t-gmac.yaml# $id: http://devicetree.org/schemas/net/allwinner,sun8i-a83t-emac.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Allwinner A83t EMAC Device Tree Bindings title: Allwinner A83t EMAC Device Tree Bindings
......
...@@ -37,13 +37,13 @@ required: ...@@ -37,13 +37,13 @@ required:
examples: examples:
- | - |
sid@1c23800 { efuse@1c23800 {
compatible = "allwinner,sun4i-a10-sid"; compatible = "allwinner,sun4i-a10-sid";
reg = <0x01c23800 0x10>; reg = <0x01c23800 0x10>;
}; };
- | - |
sid@1c23800 { efuse@1c23800 {
compatible = "allwinner,sun7i-a20-sid"; compatible = "allwinner,sun7i-a20-sid";
reg = <0x01c23800 0x200>; reg = <0x01c23800 0x200>;
}; };
......
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/nvmem/nvmem-consumer.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVMEM (Non Volatile Memory) Consumer Device Tree Bindings
maintainers:
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
select: true
properties:
nvmem:
$ref: /schemas/types.yaml#/definitions/phandle-array
description:
List of phandle to the nvmem providers.
nvmem-cells:
$ref: /schemas/types.yaml#/definitions/phandle-array
description:
List of phandle to the nvmem data cells.
nvmem-names:
$ref: /schemas/types.yaml#/definitions/string-array
description:
Names for the each nvmem provider.
nvmem-cell-names:
$ref: /schemas/types.yaml#/definitions/string-array
description:
Names for each nvmem-cells specified.
dependencies:
nvmem-names: [ nvmem ]
nvmem-cell-names: [ nvmem-cells ]
examples:
- |
tsens {
/* ... */
nvmem-cells = <&tsens_calibration>;
nvmem-cell-names = "calibration";
};
= NVMEM(Non Volatile Memory) Data Device Tree Bindings = This file has been moved to nvmem.yaml and nvmem-consumer.yaml.
This binding is intended to represent the location of hardware
configuration data stored in NVMEMs like eeprom, efuses and so on.
On a significant proportion of boards, the manufacturer has stored
some data on NVMEM, for the OS to be able to retrieve these information
and act upon it. Obviously, the OS has to know about where to retrieve
these data from, and where they are stored on the storage device.
This document is here to document this.
= Data providers =
Contains bindings specific to provider drivers and data cells as children
of this node.
Optional properties:
read-only: Mark the provider as read only.
= Data cells =
These are the child nodes of the provider which contain data cell
information like offset and size in nvmem provider.
Required properties:
reg: specifies the offset in byte within the storage device.
Optional properties:
bits: Is pair of bit location and number of bits, which specifies offset
in bit and number of bits within the address range specified by reg property.
Offset takes values from 0-7.
For example:
/* Provider */
qfprom: qfprom@700000 {
...
/* Data cells */
tsens_calibration: calib@404 {
reg = <0x404 0x10>;
};
tsens_calibration_bckp: calib_bckp@504 {
reg = <0x504 0x11>;
bits = <6 128>
};
pvs_version: pvs-version@6 {
reg = <0x6 0x2>
bits = <7 2>
};
speed_bin: speed-bin@c{
reg = <0xc 0x1>;
bits = <2 3>;
};
...
};
= Data consumers =
Are device nodes which consume nvmem data cells/providers.
Required-properties:
nvmem-cells: list of phandle to the nvmem data cells.
nvmem-cell-names: names for the each nvmem-cells specified. Required if
nvmem-cells is used.
Optional-properties:
nvmem : list of phandles to nvmem providers.
nvmem-names: names for the each nvmem provider. required if nvmem is used.
For example:
tsens {
...
nvmem-cells = <&tsens_calibration>;
nvmem-cell-names = "calibration";
};
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/nvmem/nvmem.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVMEM (Non Volatile Memory) Device Tree Bindings
maintainers:
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
description: |
This binding is intended to represent the location of hardware
configuration data stored in NVMEMs like eeprom, efuses and so on.
On a significant proportion of boards, the manufacturer has stored
some data on NVMEM, for the OS to be able to retrieve these
information and act upon it. Obviously, the OS has to know about
where to retrieve these data from, and where they are stored on the
storage device.
properties:
$nodename:
pattern: "^(eeprom|efuse|nvram)(@.*|-[0-9a-f])*$"
"#address-cells":
const: 1
"#size-cells":
const: 1
read-only:
$ref: /schemas/types.yaml#/definitions/flag
description:
Mark the provider as read only.
patternProperties:
"^.*@[0-9a-f]+$":
type: object
properties:
reg:
maxItems: 1
description:
Offset and size in bytes within the storage device.
bits:
maxItems: 1
items:
items:
- minimum: 0
maximum: 7
description:
Offset in bit within the address range specified by reg.
- minimum: 1
description:
Size in bit within the address range specified by reg.
required:
- reg
additionalProperties: false
examples:
- |
qfprom: eeprom@700000 {
#address-cells = <1>;
#size-cells = <1>;
/* ... */
/* Data cells */
tsens_calibration: calib@404 {
reg = <0x404 0x10>;
};
tsens_calibration_bckp: calib_bckp@504 {
reg = <0x504 0x11>;
bits = <6 128>;
};
pvs_version: pvs-version@6 {
reg = <0x6 0x2>;
bits = <7 2>;
};
speed_bin: speed-bin@c{
reg = <0xc 0x1>;
bits = <2 3>;
};
};
...
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
%YAML 1.2 %YAML 1.2
--- ---
$id: http://devicetree.org/schemas/display/allwinner,sun6i-a31-mipi-dphy.yaml# $id: http://devicetree.org/schemas/phy/allwinner,sun6i-a31-mipi-dphy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Copyright 2018 Linaro Ltd. # Copyright 2018 Linaro Ltd.
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/timer/intel-ixp4xx-timer.yaml#" $id: "http://devicetree.org/schemas/timer/intel,ixp4xx-timer.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: "http://devicetree.org/meta-schemas/core.yaml#"
title: Intel IXP4xx XScale Networking Processors Timers title: Intel IXP4xx XScale Networking Processors Timers
......
...@@ -64,10 +64,8 @@ Optional properties : ...@@ -64,10 +64,8 @@ Optional properties :
- power-on-time-ms : Specifies the time it takes from the time the host - power-on-time-ms : Specifies the time it takes from the time the host
initiates the power-on sequence to a port until the port has adequate initiates the power-on sequence to a port until the port has adequate
power. The value is given in ms in a 0 - 510 range (default is 100ms). power. The value is given in ms in a 0 - 510 range (default is 100ms).
- swap-dx-lanes : Specifies the downstream ports which will swap the - swap-dx-lanes : Specifies the ports which will swap the differential-pair
differential-pair (D+/D-), default is not-swapped. (D+/D-), default is not-swapped.
- swap-us-lanes : Selects the upstream port differential-pair (D+/D-)
swapping (boolean, default is not-swapped)
Examples: Examples:
usb2512b@2c { usb2512b@2c {
......
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel Documentation Guide'
tags.add("subproject")
latex_documents = [
('index', 'kernel-doc-guide.tex', 'Linux Kernel Documentation Guide',
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Linux 802.11 Driver Developer's Guide"
tags.add("subproject")
latex_documents = [
('index', '80211.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "The Linux driver implementer's API guide"
tags.add("subproject")
latex_documents = [
('index', 'driver-api.tex', project,
'The kernel development community', 'manual'),
]
...@@ -233,7 +233,7 @@ Userspace Interface ...@@ -233,7 +233,7 @@ Userspace Interface
Several sysfs attributes are generated by the Generic Counter interface, Several sysfs attributes are generated by the Generic Counter interface,
and reside under the /sys/bus/counter/devices/counterX directory, where and reside under the /sys/bus/counter/devices/counterX directory, where
counterX refers to the respective counter device. Please see counterX refers to the respective counter device. Please see
Documentation/ABI/testing/sys-bus-counter-generic-sysfs for detailed Documentation/ABI/testing/sysfs-bus-counter for detailed
information on each Generic Counter interface sysfs attribute. information on each Generic Counter interface sysfs attribute.
Through these sysfs attributes, programs and scripts may interact with Through these sysfs attributes, programs and scripts may interact with
...@@ -325,7 +325,7 @@ sysfs attributes, where Y is the unique ID of the respective Count: ...@@ -325,7 +325,7 @@ sysfs attributes, where Y is the unique ID of the respective Count:
For a more detailed breakdown of the available Generic Counter interface For a more detailed breakdown of the available Generic Counter interface
sysfs attributes, please refer to the sysfs attributes, please refer to the
Documentation/ABI/testing/sys-bus-counter file. Documentation/ABI/testing/sysfs-bus-counter file.
The Signals and Counts associated with the Counter device are registered The Signals and Counts associated with the Counter device are registered
to the system as well by the counter_register function. The to the system as well by the counter_register function. The
......
...@@ -179,8 +179,8 @@ PHY Mappings ...@@ -179,8 +179,8 @@ PHY Mappings
In order to get reference to a PHY without help from DeviceTree, the framework In order to get reference to a PHY without help from DeviceTree, the framework
offers lookups which can be compared to clkdev that allow clk structures to be offers lookups which can be compared to clkdev that allow clk structures to be
bound to devices. A lookup can be made be made during runtime when a handle to bound to devices. A lookup can be made during runtime when a handle to the
the struct phy already exists. struct phy already exists.
The framework offers the following API for registering and unregistering the The framework offers the following API for registering and unregistering the
lookups:: lookups::
......
# -*- coding: utf-8; mode: python -*-
project = "Device Power Management"
tags.add("subproject")
latex_documents = [
('index', 'pm.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Linux Filesystems API"
tags.add("subproject")
latex_documents = [
('index', 'filesystems.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Linux GPU Driver Developer's Guide"
tags.add("subproject")
latex_documents = [
('index', 'gpu.tex', project,
'The kernel development community', 'manual'),
]
...@@ -9,7 +9,7 @@ Supported chips: ...@@ -9,7 +9,7 @@ Supported chips:
Addresses scanned: PCI space Addresses scanned: PCI space
Datasheet: http://support.amd.com/us/Processor_TechDocs/32559.pdf Datasheet: http://www.amd.com/system/files/TechDocs/32559.pdf
Author: Rudolf Marek Author: Rudolf Marek
......
...@@ -111,9 +111,11 @@ needed). ...@@ -111,9 +111,11 @@ needed).
netlabel/index netlabel/index
networking/index networking/index
pcmcia/index pcmcia/index
power/index
target/index target/index
timers/index timers/index
watchdog/index watchdog/index
virtual/index
input/index input/index
hwmon/index hwmon/index
gpu/index gpu/index
...@@ -143,6 +145,7 @@ implementation. ...@@ -143,6 +145,7 @@ implementation.
arm64/index arm64/index
ia64/index ia64/index
m68k/index m68k/index
powerpc/index
riscv/index riscv/index
s390/index s390/index
sh/index sh/index
......
# -*- coding: utf-8; mode: python -*-
project = "The Linux input driver subsystem"
tags.add("subproject")
latex_documents = [
('index', 'linux-input.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Kernel Hacking Guides"
tags.add("subproject")
latex_documents = [
('index', 'kernel-hacking.tex', project,
'The kernel development community', 'manual'),
]
...@@ -82,7 +82,7 @@ itself. The read lock allows many concurrent readers. Anything that ...@@ -82,7 +82,7 @@ itself. The read lock allows many concurrent readers. Anything that
**changes** the list will have to get the write lock. **changes** the list will have to get the write lock.
NOTE! RCU is better for list traversal, but requires careful NOTE! RCU is better for list traversal, but requires careful
attention to design detail (see Documentation/RCU/listRCU.txt). attention to design detail (see Documentation/RCU/listRCU.rst).
Also, you cannot "upgrade" a read-lock to a write-lock, so if you at _any_ Also, you cannot "upgrade" a read-lock to a write-lock, so if you at _any_
time need to do any changes (even if you don't do it every time), you have time need to do any changes (even if you don't do it every time), you have
...@@ -90,7 +90,7 @@ to get the write-lock at the very beginning. ...@@ -90,7 +90,7 @@ to get the write-lock at the very beginning.
NOTE! We are working hard to remove reader-writer spinlocks in most NOTE! We are working hard to remove reader-writer spinlocks in most
cases, so please don't add a new one without consensus. (Instead, see cases, so please don't add a new one without consensus. (Instead, see
Documentation/RCU/rcu.txt for complete information.) Documentation/RCU/rcu.rst for complete information.)
---- ----
......
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel Development Documentation'
tags.add("subproject")
latex_documents = [
('index', 'maintainer.tex', 'Linux Kernel Development Documentation',
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
# SPDX-License-Identifier: GPL-2.0
project = 'Linux Media Subsystem Documentation'
tags.add("subproject")
latex_documents = [
('index', 'media.tex', 'Linux Media Subsystem Documentation',
'The kernel development community', 'manual'),
]
...@@ -548,7 +548,7 @@ There are certain things that the Linux kernel memory barriers do not guarantee: ...@@ -548,7 +548,7 @@ There are certain things that the Linux kernel memory barriers do not guarantee:
[*] For information on bus mastering DMA and coherency please read: [*] For information on bus mastering DMA and coherency please read:
Documentation/PCI/pci.rst Documentation/driver-api/pci/pci.rst
Documentation/DMA-API-HOWTO.txt Documentation/DMA-API-HOWTO.txt
Documentation/DMA-API.txt Documentation/DMA-API.txt
......
# -*- coding: utf-8; mode: python -*-
project = "Linux Networking Documentation"
tags.add("subproject")
latex_documents = [
('index', 'networking.tex', project,
'The kernel development community', 'manual'),
]
:orphan: .. SPDX-License-Identifier: GPL-2.0
================ ================
Power Management Power Management
......
========================
The PowerPC boot wrapper The PowerPC boot wrapper
------------------------ ========================
Copyright (C) Secret Lab Technologies Ltd. Copyright (C) Secret Lab Technologies Ltd.
PowerPC image targets compresses and wraps the kernel image (vmlinux) with PowerPC image targets compresses and wraps the kernel image (vmlinux) with
...@@ -21,6 +23,7 @@ it uses the wrapper script (arch/powerpc/boot/wrapper) to generate target ...@@ -21,6 +23,7 @@ it uses the wrapper script (arch/powerpc/boot/wrapper) to generate target
image. The details of the build system is discussed in the next section. image. The details of the build system is discussed in the next section.
Currently, the following image format targets exist: Currently, the following image format targets exist:
==================== ========================================================
cuImage.%: Backwards compatible uImage for older version of cuImage.%: Backwards compatible uImage for older version of
U-Boot (for versions that don't understand the device U-Boot (for versions that don't understand the device
tree). This image embeds a device tree blob inside tree). This image embeds a device tree blob inside
...@@ -29,31 +32,36 @@ Currently, the following image format targets exist: ...@@ -29,31 +32,36 @@ Currently, the following image format targets exist:
with boot wrapper code that extracts data from the old with boot wrapper code that extracts data from the old
bd_info structure and loads the data into the device bd_info structure and loads the data into the device
tree before jumping into the kernel. tree before jumping into the kernel.
Because of the series of #ifdefs found in the
Because of the series of #ifdefs found in the
bd_info structure used in the old U-Boot interfaces, bd_info structure used in the old U-Boot interfaces,
cuImages are platform specific. Each specific cuImages are platform specific. Each specific
U-Boot platform has a different platform init file U-Boot platform has a different platform init file
which populates the embedded device tree with data which populates the embedded device tree with data
from the platform specific bd_info file. The platform from the platform specific bd_info file. The platform
specific cuImage platform init code can be found in specific cuImage platform init code can be found in
arch/powerpc/boot/cuboot.*.c. Selection of the correct `arch/powerpc/boot/cuboot.*.c`. Selection of the correct
cuImage init code for a specific board can be found in cuImage init code for a specific board can be found in
the wrapper structure. the wrapper structure.
dtbImage.%: Similar to zImage, except device tree blob is embedded dtbImage.%: Similar to zImage, except device tree blob is embedded
inside the image instead of provided by firmware. The inside the image instead of provided by firmware. The
output image file can be either an elf file or a flat output image file can be either an elf file or a flat
binary depending on the platform. binary depending on the platform.
dtbImages are used on systems which do not have an
dtbImages are used on systems which do not have an
interface for passing a device tree directly. interface for passing a device tree directly.
dtbImages are similar to simpleImages except that dtbImages are similar to simpleImages except that
dtbImages have platform specific code for extracting dtbImages have platform specific code for extracting
data from the board firmware, but simpleImages do not data from the board firmware, but simpleImages do not
talk to the firmware at all. talk to the firmware at all.
PlayStation 3 support uses dtbImage. So do Embedded
PlayStation 3 support uses dtbImage. So do Embedded
Planet boards using the PlanetCore firmware. Board Planet boards using the PlanetCore firmware. Board
specific initialization code is typically found in a specific initialization code is typically found in a
file named arch/powerpc/boot/<platform>.c; but this file named arch/powerpc/boot/<platform>.c; but this
can be overridden by the wrapper script. can be overridden by the wrapper script.
simpleImage.%: Firmware independent compressed image that does not simpleImage.%: Firmware independent compressed image that does not
depend on any particular firmware interface and embeds depend on any particular firmware interface and embeds
a device tree blob. This image is a flat binary that a device tree blob. This image is a flat binary that
...@@ -61,14 +69,16 @@ Currently, the following image format targets exist: ...@@ -61,14 +69,16 @@ Currently, the following image format targets exist:
Firmware cannot pass any configuration data to the Firmware cannot pass any configuration data to the
kernel with this image type and it depends entirely on kernel with this image type and it depends entirely on
the embedded device tree for all information. the embedded device tree for all information.
The simpleImage is useful for booting systems with
The simpleImage is useful for booting systems with
an unknown firmware interface or for booting from an unknown firmware interface or for booting from
a debugger when no firmware is present (such as on a debugger when no firmware is present (such as on
the Xilinx Virtex platform). The only assumption that the Xilinx Virtex platform). The only assumption that
simpleImage makes is that RAM is correctly initialized simpleImage makes is that RAM is correctly initialized
and that the MMU is either off or has RAM mapped to and that the MMU is either off or has RAM mapped to
base address 0. base address 0.
simpleImage also supports inserting special platform
simpleImage also supports inserting special platform
specific initialization code to the start of the bootup specific initialization code to the start of the bootup
sequence. The virtex405 platform uses this feature to sequence. The virtex405 platform uses this feature to
ensure that the cache is invalidated before caching ensure that the cache is invalidated before caching
...@@ -81,9 +91,11 @@ Currently, the following image format targets exist: ...@@ -81,9 +91,11 @@ Currently, the following image format targets exist:
named (virtex405-<board>.dts). Search the wrapper named (virtex405-<board>.dts). Search the wrapper
script for 'virtex405' and see the file script for 'virtex405' and see the file
arch/powerpc/boot/virtex405-head.S for details. arch/powerpc/boot/virtex405-head.S for details.
treeImage.%; Image format for used with OpenBIOS firmware found treeImage.%; Image format for used with OpenBIOS firmware found
on some ppc4xx hardware. This image embeds a device on some ppc4xx hardware. This image embeds a device
tree blob inside the image. tree blob inside the image.
uImage: Native image format used by U-Boot. The uImage target uImage: Native image format used by U-Boot. The uImage target
does not add any boot code. It just wraps a compressed does not add any boot code. It just wraps a compressed
vmlinux in the uImage data structure. This image vmlinux in the uImage data structure. This image
...@@ -91,12 +103,14 @@ Currently, the following image format targets exist: ...@@ -91,12 +103,14 @@ Currently, the following image format targets exist:
a device tree to the kernel at boot. If using an older a device tree to the kernel at boot. If using an older
version of U-Boot, then you need to use a cuImage version of U-Boot, then you need to use a cuImage
instead. instead.
zImage.%: Image format which does not embed a device tree. zImage.%: Image format which does not embed a device tree.
Used by OpenFirmware and other firmware interfaces Used by OpenFirmware and other firmware interfaces
which are able to supply a device tree. This image which are able to supply a device tree. This image
expects firmware to provide the device tree at boot. expects firmware to provide the device tree at boot.
Typically, if you have general purpose PowerPC Typically, if you have general purpose PowerPC
hardware then you want this image format. hardware then you want this image format.
==================== ========================================================
Image types which embed a device tree blob (simpleImage, dtbImage, treeImage, Image types which embed a device tree blob (simpleImage, dtbImage, treeImage,
and cuImage) all generate the device tree blob from a file in the and cuImage) all generate the device tree blob from a file in the
......
============
CPU Families CPU Families
============ ============
...@@ -8,8 +9,8 @@ and are supported by arch/powerpc. ...@@ -8,8 +9,8 @@ and are supported by arch/powerpc.
Book3S (aka sPAPR) Book3S (aka sPAPR)
------------------ ------------------
- Hash MMU - Hash MMU
- Mix of 32 & 64 bit - Mix of 32 & 64 bit::
+--------------+ +----------------+ +--------------+ +----------------+
| Old POWER | --------------> | RS64 (threads) | | Old POWER | --------------> | RS64 (threads) |
...@@ -108,8 +109,8 @@ Book3S (aka sPAPR) ...@@ -108,8 +109,8 @@ Book3S (aka sPAPR)
IBM BookE IBM BookE
--------- ---------
- Software loaded TLB. - Software loaded TLB.
- All 32 bit - All 32 bit::
+--------------+ +--------------+
| 401 | | 401 |
...@@ -155,8 +156,8 @@ IBM BookE ...@@ -155,8 +156,8 @@ IBM BookE
Motorola/Freescale 8xx Motorola/Freescale 8xx
---------------------- ----------------------
- Software loaded with hardware assist. - Software loaded with hardware assist.
- All 32 bit - All 32 bit::
+-------------+ +-------------+
| MPC8xx Core | | MPC8xx Core |
...@@ -166,9 +167,9 @@ Motorola/Freescale 8xx ...@@ -166,9 +167,9 @@ Motorola/Freescale 8xx
Freescale BookE Freescale BookE
--------------- ---------------
- Software loaded TLB. - Software loaded TLB.
- e6500 adds HW loaded indirect TLB entries. - e6500 adds HW loaded indirect TLB entries.
- Mix of 32 & 64 bit - Mix of 32 & 64 bit::
+--------------+ +--------------+
| e200 | | e200 |
...@@ -207,8 +208,8 @@ Freescale BookE ...@@ -207,8 +208,8 @@ Freescale BookE
IBM A2 core IBM A2 core
----------- -----------
- Book3E, software loaded TLB + HW loaded indirect TLB entries. - Book3E, software loaded TLB + HW loaded indirect TLB entries.
- 64 bit - 64 bit::
+--------------+ +----------------+ +--------------+ +----------------+
| A2 core | --> | WSP | | A2 core | --> | WSP |
......
============
CPU Features
============
Hollis Blanchard <hollis@austin.ibm.com> Hollis Blanchard <hollis@austin.ibm.com>
5 Jun 2002 5 Jun 2002
...@@ -32,7 +36,7 @@ anyways). ...@@ -32,7 +36,7 @@ anyways).
After detecting the processor type, the kernel patches out sections of code After detecting the processor type, the kernel patches out sections of code
that shouldn't be used by writing nop's over it. Using cpufeatures requires that shouldn't be used by writing nop's over it. Using cpufeatures requires
just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S
transfer_to_handler: transfer_to_handler::
#ifdef CONFIG_ALTIVEC #ifdef CONFIG_ALTIVEC
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
......
====================================
Coherent Accelerator Interface (CXL) Coherent Accelerator Interface (CXL)
==================================== ====================================
...@@ -21,6 +22,8 @@ Introduction ...@@ -21,6 +22,8 @@ Introduction
Hardware overview Hardware overview
================= =================
::
POWER8/9 FPGA POWER8/9 FPGA
+----------+ +---------+ +----------+ +---------+
| | | | | | | |
...@@ -59,14 +62,16 @@ Hardware overview ...@@ -59,14 +62,16 @@ Hardware overview
the fault. The context to which this fault is serviced is based on the fault. The context to which this fault is serviced is based on
who owns that acceleration function. who owns that acceleration function.
POWER8 <-----> PSL Version 8 is compliant to the CAIA Version 1.0. - POWER8 and PSL Version 8 are compliant to the CAIA Version 1.0.
POWER9 <-----> PSL Version 9 is compliant to the CAIA Version 2.0. - POWER9 and PSL Version 9 are compliant to the CAIA Version 2.0.
This PSL Version 9 provides new features such as: This PSL Version 9 provides new features such as:
* Interaction with the nest MMU on the P9 chip. * Interaction with the nest MMU on the P9 chip.
* Native DMA support. * Native DMA support.
* Supports sending ASB_Notify messages for host thread wakeup. * Supports sending ASB_Notify messages for host thread wakeup.
* Supports Atomic operations. * Supports Atomic operations.
* .... * etc.
Cards with a PSL9 won't work on a POWER8 system and cards with a Cards with a PSL9 won't work on a POWER8 system and cards with a
PSL8 won't work on a POWER9 system. PSL8 won't work on a POWER9 system.
...@@ -147,7 +152,9 @@ User API ...@@ -147,7 +152,9 @@ User API
master devices. master devices.
A userspace library libcxl is available here: A userspace library libcxl is available here:
https://github.com/ibm-capi/libcxl https://github.com/ibm-capi/libcxl
This provides a C interface to this kernel API. This provides a C interface to this kernel API.
open open
...@@ -165,7 +172,8 @@ open ...@@ -165,7 +172,8 @@ open
When all available contexts are allocated the open call will fail When all available contexts are allocated the open call will fail
and return -ENOSPC. and return -ENOSPC.
Note: IRQs need to be allocated for each context, which may limit Note:
IRQs need to be allocated for each context, which may limit
the number of contexts that can be created, and therefore the number of contexts that can be created, and therefore
how many times the device can be opened. The POWER8 CAPP how many times the device can be opened. The POWER8 CAPP
supports 2040 IRQs and 3 are used by the kernel, so 2037 are supports 2040 IRQs and 3 are used by the kernel, so 2037 are
...@@ -186,7 +194,9 @@ ioctl ...@@ -186,7 +194,9 @@ ioctl
updated as userspace allocates and frees memory. This ioctl updated as userspace allocates and frees memory. This ioctl
returns once the AFU context is started. returns once the AFU context is started.
Takes a pointer to a struct cxl_ioctl_start_work: Takes a pointer to a struct cxl_ioctl_start_work
::
struct cxl_ioctl_start_work { struct cxl_ioctl_start_work {
__u64 flags; __u64 flags;
...@@ -269,7 +279,7 @@ read ...@@ -269,7 +279,7 @@ read
The buffer passed to read() must be at least 4K bytes. The buffer passed to read() must be at least 4K bytes.
The result of the read will be a buffer of one or more events, The result of the read will be a buffer of one or more events,
each event is of type struct cxl_event, of varying size. each event is of type struct cxl_event, of varying size::
struct cxl_event { struct cxl_event {
struct cxl_event_header header; struct cxl_event_header header;
...@@ -280,7 +290,9 @@ read ...@@ -280,7 +290,9 @@ read
}; };
}; };
The struct cxl_event_header is defined as: The struct cxl_event_header is defined as
::
struct cxl_event_header { struct cxl_event_header {
__u16 type; __u16 type;
...@@ -307,7 +319,9 @@ read ...@@ -307,7 +319,9 @@ read
For future extensions and padding. For future extensions and padding.
If the event type is CXL_EVENT_AFU_INTERRUPT then the event If the event type is CXL_EVENT_AFU_INTERRUPT then the event
structure is defined as: structure is defined as
::
struct cxl_event_afu_interrupt { struct cxl_event_afu_interrupt {
__u16 flags; __u16 flags;
...@@ -326,7 +340,9 @@ read ...@@ -326,7 +340,9 @@ read
For future extensions and padding. For future extensions and padding.
If the event type is CXL_EVENT_DATA_STORAGE then the event If the event type is CXL_EVENT_DATA_STORAGE then the event
structure is defined as: structure is defined as
::
struct cxl_event_data_storage { struct cxl_event_data_storage {
__u16 flags; __u16 flags;
...@@ -356,7 +372,9 @@ read ...@@ -356,7 +372,9 @@ read
For future extensions For future extensions
If the event type is CXL_EVENT_AFU_ERROR then the event structure If the event type is CXL_EVENT_AFU_ERROR then the event structure
is defined as: is defined as
::
struct cxl_event_afu_error { struct cxl_event_afu_error {
__u16 flags; __u16 flags;
...@@ -393,15 +411,15 @@ open ...@@ -393,15 +411,15 @@ open
ioctl ioctl
----- -----
CXL_IOCTL_DOWNLOAD_IMAGE: CXL_IOCTL_DOWNLOAD_IMAGE / CXL_IOCTL_VALIDATE_IMAGE:
CXL_IOCTL_VALIDATE_IMAGE:
Starts and controls flashing a new FPGA image. Partial Starts and controls flashing a new FPGA image. Partial
reconfiguration is not supported (yet), so the image must contain reconfiguration is not supported (yet), so the image must contain
a copy of the PSL and AFU(s). Since an image can be quite large, a copy of the PSL and AFU(s). Since an image can be quite large,
the caller may have to iterate, splitting the image in smaller the caller may have to iterate, splitting the image in smaller
chunks. chunks.
Takes a pointer to a struct cxl_adapter_image: Takes a pointer to a struct cxl_adapter_image::
struct cxl_adapter_image { struct cxl_adapter_image {
__u64 flags; __u64 flags;
__u64 data; __u64 data;
...@@ -442,7 +460,7 @@ Udev rules ...@@ -442,7 +460,7 @@ Udev rules
The following udev rules could be used to create a symlink to the The following udev rules could be used to create a symlink to the
most logical chardev to use in any programming mode (afuX.Yd for most logical chardev to use in any programming mode (afuX.Yd for
dedicated, afuX.Ys for afu directed), since the API is virtually dedicated, afuX.Ys for afu directed), since the API is virtually
identical for each: identical for each::
SUBSYSTEM=="cxl", ATTRS{mode}=="dedicated_process", SYMLINK="cxl/%b" SUBSYSTEM=="cxl", ATTRS{mode}=="dedicated_process", SYMLINK="cxl/%b"
SUBSYSTEM=="cxl", ATTRS{mode}=="afu_directed", \ SUBSYSTEM=="cxl", ATTRS{mode}=="afu_directed", \
......
================================
Coherent Accelerator (CXL) Flash
================================
Introduction Introduction
============ ============
...@@ -28,7 +32,7 @@ Introduction ...@@ -28,7 +32,7 @@ Introduction
responsible for the initialization of the adapter, setting up the responsible for the initialization of the adapter, setting up the
special path for user space access, and performing error recovery. It special path for user space access, and performing error recovery. It
communicates directly the Flash Accelerator Functional Unit (AFU) communicates directly the Flash Accelerator Functional Unit (AFU)
as described in Documentation/powerpc/cxl.txt. as described in Documentation/powerpc/cxl.rst.
The cxlflash driver supports two, mutually exclusive, modes of The cxlflash driver supports two, mutually exclusive, modes of
operation at the device (LUN) level: operation at the device (LUN) level:
...@@ -58,7 +62,7 @@ Overview ...@@ -58,7 +62,7 @@ Overview
The CXL Flash Adapter Driver establishes a master context with the The CXL Flash Adapter Driver establishes a master context with the
AFU. It uses memory mapped I/O (MMIO) for this control and setup. The AFU. It uses memory mapped I/O (MMIO) for this control and setup. The
Adapter Problem Space Memory Map looks like this: Adapter Problem Space Memory Map looks like this::
+-------------------------------+ +-------------------------------+
| 512 * 64 KB User MMIO | | 512 * 64 KB User MMIO |
...@@ -375,7 +379,7 @@ CXL Flash Driver Host IOCTLs ...@@ -375,7 +379,7 @@ CXL Flash Driver Host IOCTLs
Each host adapter instance that is supported by the cxlflash driver Each host adapter instance that is supported by the cxlflash driver
has a special character device associated with it to enable a set of has a special character device associated with it to enable a set of
host management function. These character devices are hosted in a host management function. These character devices are hosted in a
class dedicated for cxlflash and can be accessed via /dev/cxlflash/*. class dedicated for cxlflash and can be accessed via `/dev/cxlflash/*`.
Applications can be written to perform various functions using the Applications can be written to perform various functions using the
host ioctl APIs below. host ioctl APIs below.
......
=====================
DAWR issues on POWER9 DAWR issues on POWER9
============================ =====================
On POWER9 the Data Address Watchpoint Register (DAWR) can cause a checkstop On POWER9 the Data Address Watchpoint Register (DAWR) can cause a checkstop
if it points to cache inhibited (CI) memory. Currently Linux has no way to if it points to cache inhibited (CI) memory. Currently Linux has no way to
disinguish CI memory when configuring the DAWR, so (for now) the DAWR is disinguish CI memory when configuring the DAWR, so (for now) the DAWR is
disabled by this commit: disabled by this commit::
commit 9654153158d3e0684a1bdb76dbababdb7111d5a0 commit 9654153158d3e0684a1bdb76dbababdb7111d5a0
Author: Michael Neuling <mikey@neuling.org> Author: Michael Neuling <mikey@neuling.org>
...@@ -12,7 +13,7 @@ disabled by this commit: ...@@ -12,7 +13,7 @@ disabled by this commit:
powerpc: Disable DAWR in the base POWER9 CPU features powerpc: Disable DAWR in the base POWER9 CPU features
Technical Details: Technical Details:
============================ ==================
DAWR has 6 different ways of being set. DAWR has 6 different ways of being set.
1) ptrace 1) ptrace
...@@ -37,7 +38,7 @@ DAWR on the migration. ...@@ -37,7 +38,7 @@ DAWR on the migration.
For xmon, the 'bd' command will return an error on P9. For xmon, the 'bd' command will return an error on P9.
Consequences for users Consequences for users
============================ ======================
For GDB watchpoints (ie 'watch' command) on POWER9 bare metal , GDB For GDB watchpoints (ie 'watch' command) on POWER9 bare metal , GDB
will accept the command. Unfortunately since there is no hardware will accept the command. Unfortunately since there is no hardware
...@@ -57,8 +58,8 @@ trapped in GDB. The watchpoint is remembered, so if the guest is ...@@ -57,8 +58,8 @@ trapped in GDB. The watchpoint is remembered, so if the guest is
migrated back to the POWER8 host, it will start working again. migrated back to the POWER8 host, it will start working again.
Force enabling the DAWR Force enabling the DAWR
============================= =======================
Kernels (since ~v5.2) have an option to force enable the DAWR via: Kernels (since ~v5.2) have an option to force enable the DAWR via::
echo Y > /sys/kernel/debug/powerpc/dawr_enable_dangerous echo Y > /sys/kernel/debug/powerpc/dawr_enable_dangerous
...@@ -86,5 +87,7 @@ dawr_enable_dangerous file will fail if the hypervisor doesn't support ...@@ -86,5 +87,7 @@ dawr_enable_dangerous file will fail if the hypervisor doesn't support
writing the DAWR. writing the DAWR.
To double check the DAWR is working, run this kernel selftest: To double check the DAWR is working, run this kernel selftest:
tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
Any errors/failures/skips mean something is wrong. Any errors/failures/skips mean something is wrong.
DSCR (Data Stream Control Register) ===================================
================================================ DSCR (Data Stream Control Register)
===================================
DSCR register in powerpc allows user to have some control of prefetch of data DSCR register in powerpc allows user to have some control of prefetch of data
stream in the processor. Please refer to the ISA documents or related manual stream in the processor. Please refer to the ISA documents or related manual
...@@ -10,14 +11,17 @@ user interface. ...@@ -10,14 +11,17 @@ user interface.
(A) Data Structures: (A) Data Structures:
(1) thread_struct: (1) thread_struct::
dscr /* Thread DSCR value */ dscr /* Thread DSCR value */
dscr_inherit /* Thread has changed default DSCR */ dscr_inherit /* Thread has changed default DSCR */
(2) PACA: (2) PACA::
dscr_default /* per-CPU DSCR default value */ dscr_default /* per-CPU DSCR default value */
(3) sysfs.c: (3) sysfs.c::
dscr_default /* System DSCR default value */ dscr_default /* System DSCR default value */
(B) Scheduler Changes: (B) Scheduler Changes:
...@@ -35,8 +39,8 @@ user interface. ...@@ -35,8 +39,8 @@ user interface.
(C) SYSFS Interface: (C) SYSFS Interface:
Global DSCR default: /sys/devices/system/cpu/dscr_default - Global DSCR default: /sys/devices/system/cpu/dscr_default
CPU specific DSCR default: /sys/devices/system/cpu/cpuN/dscr - CPU specific DSCR default: /sys/devices/system/cpu/cpuN/dscr
Changing the global DSCR default in the sysfs will change all the CPU Changing the global DSCR default in the sysfs will change all the CPU
specific DSCR defaults immediately in their PACA structures. Again if specific DSCR defaults immediately in their PACA structures. Again if
......
==========================
PCI Bus EEH Error Recovery
==========================
Linas Vepstas <linas@austin.ibm.com>
PCI Bus EEH Error Recovery 12 January 2005
--------------------------
Linas Vepstas
<linas@austin.ibm.com>
12 January 2005
Overview: Overview:
...@@ -143,17 +143,17 @@ seen in /proc/ppc64/eeh (subject to change). Normally, almost ...@@ -143,17 +143,17 @@ seen in /proc/ppc64/eeh (subject to change). Normally, almost
all of these occur during boot, when the PCI bus is scanned, where all of these occur during boot, when the PCI bus is scanned, where
a large number of 0xff reads are part of the bus scan procedure. a large number of 0xff reads are part of the bus scan procedure.
If a frozen slot is detected, code in If a frozen slot is detected, code in
arch/powerpc/platforms/pseries/eeh.c will print a stack trace to arch/powerpc/platforms/pseries/eeh.c will print a stack trace to
syslog (/var/log/messages). This stack trace has proven to be very syslog (/var/log/messages). This stack trace has proven to be very
useful to device-driver authors for finding out at what point the EEH useful to device-driver authors for finding out at what point the EEH
error was detected, as the error itself usually occurs slightly error was detected, as the error itself usually occurs slightly
beforehand. beforehand.
Next, it uses the Linux kernel notifier chain/work queue mechanism to Next, it uses the Linux kernel notifier chain/work queue mechanism to
allow any interested parties to find out about the failure. Device allow any interested parties to find out about the failure. Device
drivers, or other parts of the kernel, can use drivers, or other parts of the kernel, can use
eeh_register_notifier(struct notifier_block *) to find out about EEH `eeh_register_notifier(struct notifier_block *)` to find out about EEH
events. The event will include a pointer to the pci device, the events. The event will include a pointer to the pci device, the
device node and some state info. Receivers of the event can "do as device node and some state info. Receivers of the event can "do as
they wish"; the default handler will be described further in this they wish"; the default handler will be described further in this
...@@ -162,10 +162,13 @@ section. ...@@ -162,10 +162,13 @@ section.
To assist in the recovery of the device, eeh.c exports the To assist in the recovery of the device, eeh.c exports the
following functions: following functions:
rtas_set_slot_reset() -- assert the PCI #RST line for 1/8th of a second rtas_set_slot_reset()
rtas_configure_bridge() -- ask firmware to configure any PCI bridges assert the PCI #RST line for 1/8th of a second
rtas_configure_bridge()
ask firmware to configure any PCI bridges
located topologically under the pci slot. located topologically under the pci slot.
eeh_save_bars() and eeh_restore_bars(): save and restore the PCI eeh_save_bars() and eeh_restore_bars():
save and restore the PCI
config-space info for a device and any devices under it. config-space info for a device and any devices under it.
...@@ -191,7 +194,7 @@ events get delivered to user-space scripts. ...@@ -191,7 +194,7 @@ events get delivered to user-space scripts.
Following is an example sequence of events that cause a device driver Following is an example sequence of events that cause a device driver
close function to be called during the first phase of an EEH reset. close function to be called during the first phase of an EEH reset.
The following sequence is an example of the pcnet32 device driver. The following sequence is an example of the pcnet32 device driver::
rpa_php_unconfig_pci_adapter (struct slot *) // in rpaphp_pci.c rpa_php_unconfig_pci_adapter (struct slot *) // in rpaphp_pci.c
{ {
...@@ -241,53 +244,54 @@ The following sequence is an example of the pcnet32 device driver. ...@@ -241,53 +244,54 @@ The following sequence is an example of the pcnet32 device driver.
}}}}}} }}}}}}
in drivers/pci/pci_driver.c, in drivers/pci/pci_driver.c,
struct device_driver->remove() is just pci_device_remove() struct device_driver->remove() is just pci_device_remove()
which calls struct pci_driver->remove() which is pcnet32_remove_one() which calls struct pci_driver->remove() which is pcnet32_remove_one()
which calls unregister_netdev() (in net/core/dev.c) which calls unregister_netdev() (in net/core/dev.c)
which calls dev_close() (in net/core/dev.c) which calls dev_close() (in net/core/dev.c)
which calls dev->stop() which is pcnet32_close() which calls dev->stop() which is pcnet32_close()
which then does the appropriate shutdown. which then does the appropriate shutdown.
--- ---
Following is the analogous stack trace for events sent to user-space Following is the analogous stack trace for events sent to user-space
when the pci device is unconfigured. when the pci device is unconfigured::
rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c
calls
pci_remove_bus_device (struct pci_dev *) { // in /drivers/pci/remove.c
calls calls
pci_destroy_dev (struct pci_dev *) { pci_remove_bus_device (struct pci_dev *) { // in /drivers/pci/remove.c
calls calls
device_unregister (&dev->dev) { // in /drivers/base/core.c pci_destroy_dev (struct pci_dev *) {
calls calls
device_del(struct device * dev) { // in /drivers/base/core.c device_unregister (&dev->dev) { // in /drivers/base/core.c
calls calls
kobject_del() { //in /libs/kobject.c device_del(struct device * dev) { // in /drivers/base/core.c
calls calls
kobject_uevent() { // in /libs/kobject.c kobject_del() { //in /libs/kobject.c
calls calls
kset_uevent() { // in /lib/kobject.c kobject_uevent() { // in /libs/kobject.c
calls calls
kset->uevent_ops->uevent() // which is really just kset_uevent() { // in /lib/kobject.c
a call to
dev_uevent() { // in /drivers/base/core.c
calls calls
dev->bus->uevent() which is really just a call to kset->uevent_ops->uevent() // which is really just
pci_uevent () { // in drivers/pci/hotplug.c a call to
which prints device name, etc.... dev_uevent() { // in /drivers/base/core.c
calls
dev->bus->uevent() which is really just a call to
pci_uevent () { // in drivers/pci/hotplug.c
which prints device name, etc....
}
} }
} then kobject_uevent() sends a netlink uevent to userspace
then kobject_uevent() sends a netlink uevent to userspace --> userspace uevent
--> userspace uevent (during early boot, nobody listens to netlink events and
(during early boot, nobody listens to netlink events and kobject_uevent() executes uevent_helper[], which runs the
kobject_uevent() executes uevent_helper[], which runs the event process /sbin/hotplug)
event process /sbin/hotplug) }
} }
} kobject_del() then calls sysfs_remove_dir(), which would
kobject_del() then calls sysfs_remove_dir(), which would trigger any user-space daemon that was watching /sysfs,
trigger any user-space daemon that was watching /sysfs, and notice the delete event.
and notice the delete event.
Pro's and Con's of the Current Design Pro's and Con's of the Current Design
...@@ -299,12 +303,12 @@ individual device drivers, so that the current design throws a wide net. ...@@ -299,12 +303,12 @@ individual device drivers, so that the current design throws a wide net.
The biggest negative of the design is that it potentially disturbs The biggest negative of the design is that it potentially disturbs
network daemons and file systems that didn't need to be disturbed. network daemons and file systems that didn't need to be disturbed.
-- A minor complaint is that resetting the network card causes - A minor complaint is that resetting the network card causes
user-space back-to-back ifdown/ifup burps that potentially disturb user-space back-to-back ifdown/ifup burps that potentially disturb
network daemons, that didn't need to even know that the pci network daemons, that didn't need to even know that the pci
card was being rebooted. card was being rebooted.
-- A more serious concern is that the same reset, for SCSI devices, - A more serious concern is that the same reset, for SCSI devices,
causes havoc to mounted file systems. Scripts cannot post-facto causes havoc to mounted file systems. Scripts cannot post-facto
unmount a file system without flushing pending buffers, but this unmount a file system without flushing pending buffers, but this
is impossible, because I/O has already been stopped. Thus, is impossible, because I/O has already been stopped. Thus,
...@@ -322,7 +326,7 @@ network daemons and file systems that didn't need to be disturbed. ...@@ -322,7 +326,7 @@ network daemons and file systems that didn't need to be disturbed.
from the block layer. It would be very natural to add an EEH from the block layer. It would be very natural to add an EEH
reset into this chain of events. reset into this chain of events.
-- If a SCSI error occurs for the root device, all is lost unless - If a SCSI error occurs for the root device, all is lost unless
the sysadmin had the foresight to run /bin, /sbin, /etc, /var the sysadmin had the foresight to run /bin, /sbin, /etc, /var
and so on, out of ramdisk/tmpfs. and so on, out of ramdisk/tmpfs.
...@@ -330,5 +334,3 @@ network daemons and file systems that didn't need to be disturbed. ...@@ -330,5 +334,3 @@ network daemons and file systems that didn't need to be disturbed.
Conclusions Conclusions
----------- -----------
There's forward progress ... There's forward progress ...
.. SPDX-License-Identifier: GPL-2.0
=======
powerpc
=======
.. toctree::
:maxdepth: 1
bootwrapper
cpu_families
cpu_features
cxl
cxlflash
dawr-power9
dscr
eeh-pci-error-recovery
firmware-assisted-dump
hvcs
isa-versions
mpc52xx
pci_iov_resource_on_powernv
pmu-ebb
ptrace
qe_firmware
syscall64-abi
transactional_memory
.. only:: subproject and html
Indices
=======
* :ref:`genindex`
:orphan: ==========================
CPU to ISA Version Mapping CPU to ISA Version Mapping
========================== ==========================
Mapping of some CPU versions to relevant ISA versions. Mapping of some CPU versions to relevant ISA versions.
========= ==================== ========= ====================================================================
CPU Architecture version CPU Architecture version
========= ==================== ========= ====================================================================
Power9 Power ISA v3.0B Power9 Power ISA v3.0B
Power8 Power ISA v2.07 Power8 Power ISA v2.07
Power7 Power ISA v2.06 Power7 Power ISA v2.06
...@@ -24,7 +23,7 @@ PPC970 - PowerPC User Instruction Set Architecture Book I v2.01 ...@@ -24,7 +23,7 @@ PPC970 - PowerPC User Instruction Set Architecture Book I v2.01
- PowerPC Virtual Environment Architecture Book II v2.01 - PowerPC Virtual Environment Architecture Book II v2.01
- PowerPC Operating Environment Architecture Book III v2.01 - PowerPC Operating Environment Architecture Book III v2.01
- Plus Altivec/VMX ~= 2.03 - Plus Altivec/VMX ~= 2.03
========= ==================== ========= ====================================================================
Key Features Key Features
...@@ -60,9 +59,9 @@ Power5 No ...@@ -60,9 +59,9 @@ Power5 No
PPC970 No PPC970 No
========== ==== ========== ====
========== ==================== ========== ====================================
CPU Transactional Memory CPU Transactional Memory
========== ==================== ========== ====================================
Power9 Yes (* see transactional_memory.txt) Power9 Yes (* see transactional_memory.txt)
Power8 Yes Power8 Yes
Power7 No Power7 No
...@@ -73,4 +72,4 @@ Power5++ No ...@@ -73,4 +72,4 @@ Power5++ No
Power5+ No Power5+ No
Power5 No Power5 No
PPC970 No PPC970 No
========== ==================== ========== ====================================
=============================
Linux 2.6.x on MPC52xx family Linux 2.6.x on MPC52xx family
----------------------------- =============================
For the latest info, go to http://www.246tNt.com/mpc52xx/ For the latest info, go to http://www.246tNt.com/mpc52xx/
To compile/use : To compile/use :
- U-Boot: - U-Boot::
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION # <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
if you wish to ). if you wish to ).
# make lite5200_defconfig # make lite5200_defconfig
...@@ -16,7 +18,8 @@ To compile/use : ...@@ -16,7 +18,8 @@ To compile/use :
=> tftpboot 400000 pRamdisk => tftpboot 400000 pRamdisk
=> bootm 200000 400000 => bootm 200000 400000
- DBug: - DBug::
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION # <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
if you wish to ). if you wish to ).
# make lite5200_defconfig # make lite5200_defconfig
...@@ -28,7 +31,8 @@ To compile/use : ...@@ -28,7 +31,8 @@ To compile/use :
DBug> dn -i zImage.initrd.lite5200 DBug> dn -i zImage.initrd.lite5200
Some remarks : Some remarks:
- The port is named mpc52xxx, and config options are PPC_MPC52xx. The MGT5100 - The port is named mpc52xxx, and config options are PPC_MPC52xx. The MGT5100
is not supported, and I'm not sure anyone is interesting in working on it is not supported, and I'm not sure anyone is interesting in working on it
so. I didn't took 5xxx because there's apparently a lot of 5xxx that have so. I didn't took 5xxx because there's apparently a lot of 5xxx that have
......
===================================================
PCI Express I/O Virtualization Resource on Powerenv
===================================================
Wei Yang <weiyang@linux.vnet.ibm.com> Wei Yang <weiyang@linux.vnet.ibm.com>
Benjamin Herrenschmidt <benh@au1.ibm.com> Benjamin Herrenschmidt <benh@au1.ibm.com>
Bjorn Helgaas <bhelgaas@google.com> Bjorn Helgaas <bhelgaas@google.com>
26 Aug 2014 26 Aug 2014
This document describes the requirement from hardware for PCI MMIO resource This document describes the requirement from hardware for PCI MMIO resource
...@@ -10,6 +17,7 @@ Endpoints and the implementation on P8 (IODA2). The next two sections talks ...@@ -10,6 +17,7 @@ Endpoints and the implementation on P8 (IODA2). The next two sections talks
about considerations on enabling SRIOV on IODA2. about considerations on enabling SRIOV on IODA2.
1. Introduction to Partitionable Endpoints 1. Introduction to Partitionable Endpoints
==========================================
A Partitionable Endpoint (PE) is a way to group the various resources A Partitionable Endpoint (PE) is a way to group the various resources
associated with a device or a set of devices to provide isolation between associated with a device or a set of devices to provide isolation between
...@@ -35,6 +43,7 @@ is a completely separate HW entity that replicates the entire logic, so has ...@@ -35,6 +43,7 @@ is a completely separate HW entity that replicates the entire logic, so has
its own set of PEs, etc. its own set of PEs, etc.
2. Implementation of Partitionable Endpoints on P8 (IODA2) 2. Implementation of Partitionable Endpoints on P8 (IODA2)
==========================================================
P8 supports up to 256 Partitionable Endpoints per PHB. P8 supports up to 256 Partitionable Endpoints per PHB.
...@@ -149,6 +158,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB. ...@@ -149,6 +158,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
sense, but we haven't done it yet. sense, but we haven't done it yet.
3. Considerations for SR-IOV on PowerKVM 3. Considerations for SR-IOV on PowerKVM
========================================
* SR-IOV Background * SR-IOV Background
...@@ -224,7 +234,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB. ...@@ -224,7 +234,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
IODA supports 256 PEs, so segmented windows contain 256 segments, so if IODA supports 256 PEs, so segmented windows contain 256 segments, so if
total_VFs is less than 256, we have the situation in Figure 1.0, where total_VFs is less than 256, we have the situation in Figure 1.0, where
segments [total_VFs, 255] of the M64 window may map to some MMIO range on segments [total_VFs, 255] of the M64 window may map to some MMIO range on
other devices: other devices::
0 1 total_VFs - 1 0 1 total_VFs - 1
+------+------+- -+------+------+ +------+------+- -+------+------+
...@@ -243,7 +253,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB. ...@@ -243,7 +253,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
Figure 1.0 Direct map VF(n) BAR space Figure 1.0 Direct map VF(n) BAR space
Our current solution is to allocate 256 segments even if the VF(n) BAR Our current solution is to allocate 256 segments even if the VF(n) BAR
space doesn't need that much, as shown in Figure 1.1: space doesn't need that much, as shown in Figure 1.1::
0 1 total_VFs - 1 255 0 1 total_VFs - 1 255
+------+------+- -+------+------+- -+------+------+ +------+------+- -+------+------+- -+------+------+
...@@ -269,6 +279,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB. ...@@ -269,6 +279,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
responds to segments [total_VFs, 255]. responds to segments [total_VFs, 255].
4. Implications for the Generic PCI Code 4. Implications for the Generic PCI Code
========================================
The PCIe SR-IOV spec requires that the base of the VF(n) BAR space be The PCIe SR-IOV spec requires that the base of the VF(n) BAR space be
aligned to the size of an individual VF BAR. aligned to the size of an individual VF BAR.
......
========================
PMU Event Based Branches PMU Event Based Branches
======================== ========================
......
======
Ptrace
======
GDB intends to support the following hardware debug features of BookE GDB intends to support the following hardware debug features of BookE
processors: processors:
...@@ -12,6 +16,7 @@ that GDB doesn't need to special-case each of them. We added the ...@@ -12,6 +16,7 @@ that GDB doesn't need to special-case each of them. We added the
following 3 new ptrace requests. following 3 new ptrace requests.
1. PTRACE_PPC_GETHWDEBUGINFO 1. PTRACE_PPC_GETHWDEBUGINFO
============================
Query for GDB to discover the hardware debug features. The main info to Query for GDB to discover the hardware debug features. The main info to
be returned here is the minimum alignment for the hardware watchpoints. be returned here is the minimum alignment for the hardware watchpoints.
...@@ -22,9 +27,9 @@ adding special cases to GDB based on what it sees in AUXV. ...@@ -22,9 +27,9 @@ adding special cases to GDB based on what it sees in AUXV.
Since we're at it, we added other useful info that the kernel can return to Since we're at it, we added other useful info that the kernel can return to
GDB: this query will return the number of hardware breakpoints, hardware GDB: this query will return the number of hardware breakpoints, hardware
watchpoints and whether it supports a range of addresses and a condition. watchpoints and whether it supports a range of addresses and a condition.
The query will fill the following structure provided by the requesting process: The query will fill the following structure provided by the requesting process::
struct ppc_debug_info { struct ppc_debug_info {
unit32_t version; unit32_t version;
unit32_t num_instruction_bps; unit32_t num_instruction_bps;
unit32_t num_data_bps; unit32_t num_data_bps;
...@@ -32,46 +37,46 @@ struct ppc_debug_info { ...@@ -32,46 +37,46 @@ struct ppc_debug_info {
unit32_t data_bp_alignment; unit32_t data_bp_alignment;
unit32_t sizeof_condition; /* size of the DVC register */ unit32_t sizeof_condition; /* size of the DVC register */
uint64_t features; /* bitmask of the individual flags */ uint64_t features; /* bitmask of the individual flags */
}; };
features will have bits indicating whether there is support for: features will have bits indicating whether there is support for::
#define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1 #define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1
#define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2 #define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2
#define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4 #define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4
#define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8 #define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8
#define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10 #define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10
2. PTRACE_SETHWDEBUG 2. PTRACE_SETHWDEBUG
Sets a hardware breakpoint or watchpoint, according to the provided structure: Sets a hardware breakpoint or watchpoint, according to the provided structure::
struct ppc_hw_breakpoint { struct ppc_hw_breakpoint {
uint32_t version; uint32_t version;
#define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1 #define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1
#define PPC_BREAKPOINT_TRIGGER_READ 0x2 #define PPC_BREAKPOINT_TRIGGER_READ 0x2
#define PPC_BREAKPOINT_TRIGGER_WRITE 0x4 #define PPC_BREAKPOINT_TRIGGER_WRITE 0x4
uint32_t trigger_type; /* only some combinations allowed */ uint32_t trigger_type; /* only some combinations allowed */
#define PPC_BREAKPOINT_MODE_EXACT 0x0 #define PPC_BREAKPOINT_MODE_EXACT 0x0
#define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1 #define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1
#define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2 #define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2
#define PPC_BREAKPOINT_MODE_MASK 0x3 #define PPC_BREAKPOINT_MODE_MASK 0x3
uint32_t addr_mode; /* address match mode */ uint32_t addr_mode; /* address match mode */
#define PPC_BREAKPOINT_CONDITION_MODE 0x3 #define PPC_BREAKPOINT_CONDITION_MODE 0x3
#define PPC_BREAKPOINT_CONDITION_NONE 0x0 #define PPC_BREAKPOINT_CONDITION_NONE 0x0
#define PPC_BREAKPOINT_CONDITION_AND 0x1 #define PPC_BREAKPOINT_CONDITION_AND 0x1
#define PPC_BREAKPOINT_CONDITION_EXACT 0x1 /* different name for the same thing as above */ #define PPC_BREAKPOINT_CONDITION_EXACT 0x1 /* different name for the same thing as above */
#define PPC_BREAKPOINT_CONDITION_OR 0x2 #define PPC_BREAKPOINT_CONDITION_OR 0x2
#define PPC_BREAKPOINT_CONDITION_AND_OR 0x3 #define PPC_BREAKPOINT_CONDITION_AND_OR 0x3
#define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000 /* byte enable bits */ #define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000 /* byte enable bits */
#define PPC_BREAKPOINT_CONDITION_BE(n) (1<<((n)+16)) #define PPC_BREAKPOINT_CONDITION_BE(n) (1<<((n)+16))
uint32_t condition_mode; /* break/watchpoint condition flags */ uint32_t condition_mode; /* break/watchpoint condition flags */
uint64_t addr; uint64_t addr;
uint64_t addr2; uint64_t addr2;
uint64_t condition_value; uint64_t condition_value;
}; };
A request specifies one event, not necessarily just one register to be set. A request specifies one event, not necessarily just one register to be set.
For instance, if the request is for a watchpoint with a condition, both the For instance, if the request is for a watchpoint with a condition, both the
...@@ -88,61 +93,61 @@ can't be allocated on the registers. ...@@ -88,61 +93,61 @@ can't be allocated on the registers.
Some examples of using the structure to: Some examples of using the structure to:
- set a breakpoint in the first breakpoint register - set a breakpoint in the first breakpoint register::
p.version = PPC_DEBUG_CURRENT_VERSION; p.version = PPC_DEBUG_CURRENT_VERSION;
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE; p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT; p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE; p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
p.addr = (uint64_t) address; p.addr = (uint64_t) address;
p.addr2 = 0; p.addr2 = 0;
p.condition_value = 0; p.condition_value = 0;
- set a watchpoint which triggers on reads in the second watchpoint register - set a watchpoint which triggers on reads in the second watchpoint register::
p.version = PPC_DEBUG_CURRENT_VERSION; p.version = PPC_DEBUG_CURRENT_VERSION;
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ; p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT; p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE; p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
p.addr = (uint64_t) address; p.addr = (uint64_t) address;
p.addr2 = 0; p.addr2 = 0;
p.condition_value = 0; p.condition_value = 0;
- set a watchpoint which triggers only with a specific value - set a watchpoint which triggers only with a specific value::
p.version = PPC_DEBUG_CURRENT_VERSION; p.version = PPC_DEBUG_CURRENT_VERSION;
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ; p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT; p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
p.condition_mode = PPC_BREAKPOINT_CONDITION_AND | PPC_BREAKPOINT_CONDITION_BE_ALL; p.condition_mode = PPC_BREAKPOINT_CONDITION_AND | PPC_BREAKPOINT_CONDITION_BE_ALL;
p.addr = (uint64_t) address; p.addr = (uint64_t) address;
p.addr2 = 0; p.addr2 = 0;
p.condition_value = (uint64_t) condition; p.condition_value = (uint64_t) condition;
- set a ranged hardware breakpoint - set a ranged hardware breakpoint::
p.version = PPC_DEBUG_CURRENT_VERSION; p.version = PPC_DEBUG_CURRENT_VERSION;
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE; p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE; p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE; p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
p.addr = (uint64_t) begin_range; p.addr = (uint64_t) begin_range;
p.addr2 = (uint64_t) end_range; p.addr2 = (uint64_t) end_range;
p.condition_value = 0; p.condition_value = 0;
- set a watchpoint in server processors (BookS) - set a watchpoint in server processors (BookS)::
p.version = 1; p.version = 1;
p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW; p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE; p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
or or
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT; p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE; p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
p.addr = (uint64_t) begin_range; p.addr = (uint64_t) begin_range;
/* For PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE addr2 needs to be specified, where /* For PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE addr2 needs to be specified, where
* addr2 - addr <= 8 Bytes. * addr2 - addr <= 8 Bytes.
*/ */
p.addr2 = (uint64_t) end_range; p.addr2 = (uint64_t) end_range;
p.condition_value = 0; p.condition_value = 0;
3. PTRACE_DELHWDEBUG 3. PTRACE_DELHWDEBUG
......
Freescale QUICC Engine Firmware Uploading =========================================
----------------------------------------- Freescale QUICC Engine Firmware Uploading
=========================================
(c) 2007 Timur Tabi <timur at freescale.com>, (c) 2007 Timur Tabi <timur at freescale.com>,
Freescale Semiconductor Freescale Semiconductor
Table of Contents .. Table of Contents
=================
I - Software License for Firmware I - Software License for Firmware
II - Microcode Availability II - Microcode Availability
III - Description and Terminology III - Description and Terminology
IV - Microcode Programming Details IV - Microcode Programming Details
V - Firmware Structure Layout V - Firmware Structure Layout
VI - Sample Code for Creating Firmware Files VI - Sample Code for Creating Firmware Files
Revision Information Revision Information
==================== ====================
...@@ -39,7 +39,7 @@ http://opensource.freescale.com. For other firmware files, please contact ...@@ -39,7 +39,7 @@ http://opensource.freescale.com. For other firmware files, please contact
your Freescale representative or your operating system vendor. your Freescale representative or your operating system vendor.
III - Description and Terminology III - Description and Terminology
================================ =================================
In this document, the term 'microcode' refers to the sequence of 32-bit In this document, the term 'microcode' refers to the sequence of 32-bit
integers that compose the actual QE microcode. integers that compose the actual QE microcode.
...@@ -89,7 +89,7 @@ being fixed in the RAM package utilizing they should be activated. This data ...@@ -89,7 +89,7 @@ being fixed in the RAM package utilizing they should be activated. This data
structure signals the microcode which of these virtual traps is active. structure signals the microcode which of these virtual traps is active.
This structure contains 6 words that the application should copy to some This structure contains 6 words that the application should copy to some
specific been defined. This table describes the structure. specific been defined. This table describes the structure::
--------------------------------------------------------------- ---------------------------------------------------------------
| Offset in | | Destination Offset | Size of | | Offset in | | Destination Offset | Size of |
...@@ -119,7 +119,7 @@ Extended Modes ...@@ -119,7 +119,7 @@ Extended Modes
This is a double word bit array (64 bits) that defines special functionality This is a double word bit array (64 bits) that defines special functionality
which has an impact on the software drivers. Each bit has its own impact which has an impact on the software drivers. Each bit has its own impact
and has special instructions for the s/w associated with it. This structure is and has special instructions for the s/w associated with it. This structure is
described in this table: described in this table::
----------------------------------------------------------------------- -----------------------------------------------------------------------
| Bit # | Name | Description | | Bit # | Name | Description |
...@@ -220,7 +220,8 @@ The 'model' field is a 16-bit number that matches the actual SOC. The ...@@ -220,7 +220,8 @@ The 'model' field is a 16-bit number that matches the actual SOC. The
'major' and 'minor' fields are the major and minor revision numbers, 'major' and 'minor' fields are the major and minor revision numbers,
respectively, of the SOC. respectively, of the SOC.
For example, to match the 8323, revision 1.0: For example, to match the 8323, revision 1.0::
soc.model = 8323 soc.model = 8323
soc.major = 1 soc.major = 1
soc.minor = 0 soc.minor = 0
...@@ -273,10 +274,10 @@ library and available to any driver that calles qe_get_firmware_info(). ...@@ -273,10 +274,10 @@ library and available to any driver that calles qe_get_firmware_info().
'reserved'. 'reserved'.
After the last microcode is a 32-bit CRC. It can be calculated using After the last microcode is a 32-bit CRC. It can be calculated using
this algorithm: this algorithm::
u32 crc32(const u8 *p, unsigned int len) u32 crc32(const u8 *p, unsigned int len)
{ {
unsigned int i; unsigned int i;
u32 crc = 0; u32 crc = 0;
...@@ -286,7 +287,7 @@ u32 crc32(const u8 *p, unsigned int len) ...@@ -286,7 +287,7 @@ u32 crc32(const u8 *p, unsigned int len)
crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0); crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
} }
return crc; return crc;
} }
VI - Sample Code for Creating Firmware Files VI - Sample Code for Creating Firmware Files
============================================ ============================================
......
...@@ -5,12 +5,12 @@ Power Architecture 64-bit Linux system call ABI ...@@ -5,12 +5,12 @@ Power Architecture 64-bit Linux system call ABI
syscall syscall
======= =======
syscall calling sequence[*] matches the Power Architecture 64-bit ELF ABI syscall calling sequence\ [1]_ matches the Power Architecture 64-bit ELF ABI
specification C function calling sequence, including register preservation specification C function calling sequence, including register preservation
rules, with the following differences. rules, with the following differences.
[*] Some syscalls (typically low-level management functions) may have .. [1] Some syscalls (typically low-level management functions) may have
different calling sequences (e.g., rt_sigreturn). different calling sequences (e.g., rt_sigreturn).
Parameters and return value Parameters and return value
--------------------------- ---------------------------
...@@ -33,12 +33,14 @@ Register preservation rules ...@@ -33,12 +33,14 @@ Register preservation rules
Register preservation rules match the ELF ABI calling sequence with the Register preservation rules match the ELF ABI calling sequence with the
following differences: following differences:
r0: Volatile. (System call number.) =========== ============= ========================================
r3: Volatile. (Parameter 1, and return value.) r0 Volatile (System call number.)
r4-r8: Volatile. (Parameters 2-6.) r3 Volatile (Parameter 1, and return value.)
cr0: Volatile (cr0.SO is the return error condition) r4-r8 Volatile (Parameters 2-6.)
cr1, cr5-7: Nonvolatile. cr0 Volatile (cr0.SO is the return error condition)
lr: Nonvolatile. cr1, cr5-7 Nonvolatile
lr Nonvolatile
=========== ============= ========================================
All floating point and vector data registers as well as control and status All floating point and vector data registers as well as control and status
registers are nonvolatile. registers are nonvolatile.
...@@ -90,9 +92,12 @@ The vsyscall may or may not use the caller's stack frame save areas. ...@@ -90,9 +92,12 @@ The vsyscall may or may not use the caller's stack frame save areas.
Register preservation rules Register preservation rules
--------------------------- ---------------------------
r0: Volatile.
cr1, cr5-7: Volatile. =========== ========
lr: Volatile. r0 Volatile
cr1, cr5-7 Volatile
lr Volatile
=========== ========
Invocation Invocation
---------- ----------
......
============================
Transactional Memory support Transactional Memory support
============================ ============================
...@@ -17,29 +18,29 @@ instructions are presented to delimit transactions; transactions are ...@@ -17,29 +18,29 @@ instructions are presented to delimit transactions; transactions are
guaranteed to either complete atomically or roll back and undo any partial guaranteed to either complete atomically or roll back and undo any partial
changes. changes.
A simple transaction looks like this: A simple transaction looks like this::
begin_move_money: begin_move_money:
tbegin tbegin
beq abort_handler beq abort_handler
ld r4, SAVINGS_ACCT(r3) ld r4, SAVINGS_ACCT(r3)
ld r5, CURRENT_ACCT(r3) ld r5, CURRENT_ACCT(r3)
subi r5, r5, 1 subi r5, r5, 1
addi r4, r4, 1 addi r4, r4, 1
std r4, SAVINGS_ACCT(r3) std r4, SAVINGS_ACCT(r3)
std r5, CURRENT_ACCT(r3) std r5, CURRENT_ACCT(r3)
tend tend
b continue b continue
abort_handler: abort_handler:
... test for odd failures ... ... test for odd failures ...
/* Retry the transaction if it failed because it conflicted with /* Retry the transaction if it failed because it conflicted with
* someone else: */ * someone else: */
b begin_move_money b begin_move_money
The 'tbegin' instruction denotes the start point, and 'tend' the end point. The 'tbegin' instruction denotes the start point, and 'tend' the end point.
...@@ -123,7 +124,7 @@ Transaction-aware signal handlers can read the transactional register state ...@@ -123,7 +124,7 @@ Transaction-aware signal handlers can read the transactional register state
from the second ucontext. This will be necessary for crash handlers to from the second ucontext. This will be necessary for crash handlers to
determine, for example, the address of the instruction causing the SIGSEGV. determine, for example, the address of the instruction causing the SIGSEGV.
Example signal handler: Example signal handler::
void crash_handler(int sig, siginfo_t *si, void *uc) void crash_handler(int sig, siginfo_t *si, void *uc)
{ {
...@@ -133,9 +134,9 @@ Example signal handler: ...@@ -133,9 +134,9 @@ Example signal handler:
if (ucp_link) { if (ucp_link) {
u64 msr = ucp->uc_mcontext.regs->msr; u64 msr = ucp->uc_mcontext.regs->msr;
/* May have transactional ucontext! */ /* May have transactional ucontext! */
#ifndef __powerpc64__ #ifndef __powerpc64__
msr |= ((u64)transactional_ucp->uc_mcontext.regs->msr) << 32; msr |= ((u64)transactional_ucp->uc_mcontext.regs->msr) << 32;
#endif #endif
if (MSR_TM_ACTIVE(msr)) { if (MSR_TM_ACTIVE(msr)) {
/* Yes, we crashed during a transaction. Oops. */ /* Yes, we crashed during a transaction. Oops. */
fprintf(stderr, "Transaction to be restarted at 0x%llx, but " fprintf(stderr, "Transaction to be restarted at 0x%llx, but "
...@@ -176,6 +177,7 @@ Failure cause codes used by kernel ...@@ -176,6 +177,7 @@ Failure cause codes used by kernel
These are defined in <asm/reg.h>, and distinguish different reasons why the These are defined in <asm/reg.h>, and distinguish different reasons why the
kernel aborted a transaction: kernel aborted a transaction:
====================== ================================
TM_CAUSE_RESCHED Thread was rescheduled. TM_CAUSE_RESCHED Thread was rescheduled.
TM_CAUSE_TLBI Software TLB invalid. TM_CAUSE_TLBI Software TLB invalid.
TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap. TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap.
...@@ -184,6 +186,7 @@ kernel aborted a transaction: ...@@ -184,6 +186,7 @@ kernel aborted a transaction:
TM_CAUSE_MISC Currently unused. TM_CAUSE_MISC Currently unused.
TM_CAUSE_ALIGNMENT Alignment fault. TM_CAUSE_ALIGNMENT Alignment fault.
TM_CAUSE_EMULATE Emulation that touched memory. TM_CAUSE_EMULATE Emulation that touched memory.
====================== ================================
These can be checked by the user program's abort handler as TEXASR[0:7]. If These can be checked by the user program's abort handler as TEXASR[0:7]. If
bit 7 is set, it indicates that the error is consider persistent. For example bit 7 is set, it indicates that the error is consider persistent. For example
...@@ -203,7 +206,7 @@ POWER9 ...@@ -203,7 +206,7 @@ POWER9
====== ======
TM on POWER9 has issues with storing the complete register state. This TM on POWER9 has issues with storing the complete register state. This
is described in this commit: is described in this commit::
commit 4bb3c7a0208fc13ca70598efd109901a7cd45ae7 commit 4bb3c7a0208fc13ca70598efd109901a7cd45ae7
Author: Paul Mackerras <paulus@ozlabs.org> Author: Paul Mackerras <paulus@ozlabs.org>
......
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel Development Documentation'
tags.add("subproject")
latex_documents = [
('index', 'process.tex', 'Linux Kernel Development Documentation',
'The kernel development community', 'manual'),
]
...@@ -119,3 +119,17 @@ array may exceed the remaining memory in the stack segment. This could ...@@ -119,3 +119,17 @@ array may exceed the remaining memory in the stack segment. This could
lead to a crash, possible overwriting sensitive contents at the end of the lead to a crash, possible overwriting sensitive contents at the end of the
stack (when built without `CONFIG_THREAD_INFO_IN_TASK=y`), or overwriting stack (when built without `CONFIG_THREAD_INFO_IN_TASK=y`), or overwriting
memory adjacent to the stack (when built without `CONFIG_VMAP_STACK=y`) memory adjacent to the stack (when built without `CONFIG_VMAP_STACK=y`)
Implicit switch case fall-through
---------------------------------
The C language allows switch cases to "fall through" when
a "break" statement is missing at the end of a case. This,
however, introduces ambiguity in the code, as it's not always
clear if the missing break is intentional or a bug. As there
have been a long list of flaws `due to missing "break" statements
<https://cwe.mitre.org/data/definitions/484.html>`_, we no longer allow
"implicit fall-through". In order to identify an intentional fall-through
case, we have adopted the marking used by static analyzers: a comment
saying `/* Fall through */`. Once the C++17 `__attribute__((fallthrough))`
is more widely handled by C compilers, static analyzers, and IDEs, we can
switch to using that instead.
...@@ -180,6 +180,13 @@ The process of how these work together. ...@@ -180,6 +180,13 @@ The process of how these work together.
add it to an iommu_group and a vfio_group. Then we could pass through add it to an iommu_group and a vfio_group. Then we could pass through
the mdev to a guest. the mdev to a guest.
VFIO-CCW Regions
----------------
The vfio-ccw driver exposes MMIO regions to accept requests from and return
results to userspace.
vfio-ccw I/O region vfio-ccw I/O region
------------------- -------------------
...@@ -205,6 +212,25 @@ irb_area stores the I/O result. ...@@ -205,6 +212,25 @@ irb_area stores the I/O result.
ret_code stores a return code for each access of the region. ret_code stores a return code for each access of the region.
This region is always available.
vfio-ccw cmd region
-------------------
The vfio-ccw cmd region is used to accept asynchronous instructions
from userspace::
#define VFIO_CCW_ASYNC_CMD_HSCH (1 << 0)
#define VFIO_CCW_ASYNC_CMD_CSCH (1 << 1)
struct ccw_cmd_region {
__u32 command;
__u32 ret_code;
} __packed;
This region is exposed via region type VFIO_REGION_SUBTYPE_CCW_ASYNC_CMD.
Currently, CLEAR SUBCHANNEL and HALT SUBCHANNEL use this region.
vfio-ccw operation details vfio-ccw operation details
-------------------------- --------------------------
...@@ -306,9 +332,8 @@ Together with the corresponding work in QEMU, we can bring the passed ...@@ -306,9 +332,8 @@ Together with the corresponding work in QEMU, we can bring the passed
through DASD/ECKD device online in a guest now and use it as a block through DASD/ECKD device online in a guest now and use it as a block
device. device.
While the current code allows the guest to start channel programs via The current code allows the guest to start channel programs via
START SUBCHANNEL, support for HALT SUBCHANNEL or CLEAR SUBCHANNEL is START SUBCHANNEL, and to issue HALT SUBCHANNEL and CLEAR SUBCHANNEL.
not yet implemented.
vfio-ccw supports classic (command mode) channel I/O only. Transport vfio-ccw supports classic (command mode) channel I/O only. Transport
mode (HPF) is not supported. mode (HPF) is not supported.
......
# -*- coding: utf-8; mode: python -*-
project = "SuperH architecture implementation manual"
tags.add("subproject")
latex_documents = [
('index', 'sh.tex', project,
'The kernel development community', 'manual'),
]
# -*- coding: utf-8; mode: python -*-
project = "Linux Sound Subsystem Documentation"
tags.add("subproject")
latex_documents = [
('index', 'sound.tex', project,
'The kernel development community', 'manual'),
]
...@@ -21,6 +21,29 @@ def loadConfig(namespace): ...@@ -21,6 +21,29 @@ def loadConfig(namespace):
and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ): and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):
config_file = os.path.abspath(config_file) config_file = os.path.abspath(config_file)
# Let's avoid one conf.py file just due to latex_documents
start = config_file.find('Documentation/')
if start >= 0:
start = config_file.find('/', start + 1)
end = config_file.rfind('/')
if start >= 0 and end > 0:
dir = config_file[start + 1:end]
print("source directory: %s" % dir)
new_latex_docs = []
latex_documents = namespace['latex_documents']
for l in latex_documents:
if l[0].find(dir + '/') == 0:
has = True
fn = l[0][len(dir) + 1:]
new_latex_docs.append((fn, l[1], l[2], l[3], l[4]))
break
namespace['latex_documents'] = new_latex_docs
# If there is an extra conf.py file, load it
if os.path.isfile(config_file): if os.path.isfile(config_file):
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()
...@@ -29,4 +52,6 @@ def loadConfig(namespace): ...@@ -29,4 +52,6 @@ def loadConfig(namespace):
del config['__file__'] del config['__file__']
namespace.update(config) namespace.update(config)
else: else:
sys.stderr.write("WARNING: additional sphinx-config not found: %s\n" % config_file) config = namespace.copy()
config['tags'].add("subproject")
namespace.update(config)
...@@ -242,8 +242,9 @@ del kernel: ...@@ -242,8 +242,9 @@ del kernel:
* Per inserire blocchi di testo con caratteri a dimensione fissa (codici di * Per inserire blocchi di testo con caratteri a dimensione fissa (codici di
esempio, casi d'uso, eccetera): utilizzate ``::`` quando non è necessario esempio, casi d'uso, eccetera): utilizzate ``::`` quando non è necessario
evidenziare la sintassi, specialmente per piccoli frammenti; invece, evidenziare la sintassi, specialmente per piccoli frammenti; invece,
utilizzate ``.. code-block:: <language>`` per blocchi di più lunghi che utilizzate ``.. code-block:: <language>`` per blocchi più lunghi che
potranno beneficiare dell'avere la sintassi evidenziata. beneficeranno della sintassi evidenziata. Per un breve pezzo di codice da
inserire nel testo, usate \`\`.
Il dominio C Il dominio C
...@@ -267,12 +268,14 @@ molto comune come ``open`` o ``ioctl``: ...@@ -267,12 +268,14 @@ molto comune come ``open`` o ``ioctl``:
Il nome della funzione (per esempio ioctl) rimane nel testo ma il nome del suo Il nome della funzione (per esempio ioctl) rimane nel testo ma il nome del suo
riferimento cambia da ``ioctl`` a ``VIDIOC_LOG_STATUS``. Anche la voce riferimento cambia da ``ioctl`` a ``VIDIOC_LOG_STATUS``. Anche la voce
nell'indice cambia in ``VIDIOC_LOG_STATUS`` e si potrà quindi fare riferimento nell'indice cambia in ``VIDIOC_LOG_STATUS``.
a questa funzione scrivendo:
Notate che per una funzione non c'è bisogno di usare ``c:func:`` per generarne
.. code-block:: rst i riferimenti nella documentazione. Grazie a qualche magica estensione a
Sphinx, il sistema di generazione della documentazione trasformerà
:c:func:`VIDIOC_LOG_STATUS` automaticamente un riferimento ad una ``funzione()`` in un riferimento
incrociato quando questa ha una voce nell'indice. Se trovate degli usi di
``c:func:`` nella documentazione del kernel, sentitevi liberi di rimuoverli.
Tabelle a liste Tabelle a liste
......
...@@ -27,6 +27,7 @@ Di seguito le guide che ogni sviluppatore dovrebbe leggere. ...@@ -27,6 +27,7 @@ Di seguito le guide che ogni sviluppatore dovrebbe leggere.
code-of-conduct code-of-conduct
development-process development-process
submitting-patches submitting-patches
programming-language
coding-style coding-style
maintainer-pgp-guide maintainer-pgp-guide
email-clients email-clients
......
.. include:: ../disclaimer-ita.rst .. include:: ../disclaimer-ita.rst
:Original: :ref:`Documentation/process/kernel-docs.rst <kernel_docs>` :Original: :ref:`Documentation/process/kernel-docs.rst <kernel_docs>`
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
.. _it_kernel_docs: .. _it_kernel_docs:
...@@ -8,6 +9,10 @@ ...@@ -8,6 +9,10 @@
Indice di documenti per le persone interessate a capire e/o scrivere per il kernel Linux Indice di documenti per le persone interessate a capire e/o scrivere per il kernel Linux
======================================================================================== ========================================================================================
.. warning:: .. note::
Questo documento contiene riferimenti a documenti in lingua inglese; inoltre
TODO ancora da tradurre utilizza dai campi *ReStructuredText* di supporto alla ricerca e che per
questo motivo è meglio non tradurre al fine di garantirne un corretto
utilizzo.
Per questi motivi il documento non verrà tradotto. Per favore fate
riferimento al documento originale in lingua inglese.
...@@ -248,7 +248,10 @@ possano ricevere la vostra nuova sottochiave:: ...@@ -248,7 +248,10 @@ possano ricevere la vostra nuova sottochiave::
kernel. kernel.
Se per qualche ragione preferite rimanere con sottochiavi RSA, nel comando Se per qualche ragione preferite rimanere con sottochiavi RSA, nel comando
precedente, sostituite "ed25519" con "rsa2048". precedente, sostituite "ed25519" con "rsa2048". In aggiunta, se avete
intenzione di usare un dispositivo hardware che non supporta le chiavi
ED25519 ECC, come la Nitrokey Pro o la Yubikey, allora dovreste usare
"nistp256" al posto di "ed25519".
Copia di riserva della chiave primaria per gestire il recupero da disastro Copia di riserva della chiave primaria per gestire il recupero da disastro
-------------------------------------------------------------------------- --------------------------------------------------------------------------
...@@ -449,23 +452,27 @@ implementi le funzionalità delle smartcard. Sul mercato ci sono diverse ...@@ -449,23 +452,27 @@ implementi le funzionalità delle smartcard. Sul mercato ci sono diverse
soluzioni disponibili: soluzioni disponibili:
- `Nitrokey Start`_: è Open hardware e Free Software, è basata sul progetto - `Nitrokey Start`_: è Open hardware e Free Software, è basata sul progetto
`GnuK`_ della FSIJ. Ha il supporto per chiavi ECC, ma meno funzionalità di `GnuK`_ della FSIJ. Questo è uno dei pochi dispositivi a supportare le chiavi
sicurezza (come la resistenza alla manomissione o alcuni attacchi ad un ECC ED25519, ma offre meno funzionalità di sicurezza (come la resistenza
canale laterale). alla manomissione o alcuni attacchi ad un canale laterale).
- `Nitrokey Pro`_: è simile alla Nitrokey Start, ma è più resistente alla - `Nitrokey Pro`_: è simile alla Nitrokey Start, ma è più resistente alla
manomissione e offre più funzionalità di sicurezza, ma l'ECC. manomissione e offre più funzionalità di sicurezza. La Pro 2 supporta la
- `Yubikey 4`_: l'hardware e il software sono proprietari, ma è più economica crittografia ECC (NISTP).
- `Yubikey 5`_: l'hardware e il software sono proprietari, ma è più economica
della Nitrokey Pro ed è venduta anche con porta USB-C il che è utile con i della Nitrokey Pro ed è venduta anche con porta USB-C il che è utile con i
computer portatili più recenti. In aggiunta, offre altre funzionalità di computer portatili più recenti. In aggiunta, offre altre funzionalità di
sicurezza come FIDO, U2F, ma non l'ECC sicurezza come FIDO, U2F, e ora supporta anche le chiavi ECC (NISTP)
`Su LWN c'è una buona recensione`_ dei modelli elencati qui sopra e altri. `Su LWN c'è una buona recensione`_ dei modelli elencati qui sopra e altri.
La scelta dipenderà dal costo, dalla disponibilità nella vostra area
geografica e vostre considerazioni sull'hardware aperto/proprietario.
Se volete usare chiavi ECC, la vostra migliore scelta sul mercato è la Se volete usare chiavi ECC, la vostra migliore scelta sul mercato è la
Nitrokey Start. Nitrokey Start.
.. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6 .. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6
.. _`Nitrokey Pro`: https://shop.nitrokey.com/shop/product/nitrokey-pro-3 .. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nitrokey-pro-2-3
.. _`Yubikey 4`: https://www.yubico.com/product/yubikey-4-series/ .. _`Yubikey 5`: https://www.yubico.com/product/yubikey-5-overview/
.. _Gnuk: http://www.fsij.org/doc-gnuk/ .. _Gnuk: http://www.fsij.org/doc-gnuk/
.. _`Su LWN c'è una buona recensione`: https://lwn.net/Articles/736231/ .. _`Su LWN c'è una buona recensione`: https://lwn.net/Articles/736231/
......
.. include:: ../disclaimer-ita.rst
:Original: :ref:`Documentation/process/programming-language.rst <programming_language>`
:Translator: Federico Vaga <federico.vaga@vaga.pv.it>
.. _it_programming_language:
Linguaggio di programmazione
============================
Il kernel è scritto nel linguaggio di programmazione C [c-language]_.
Più precisamente, il kernel viene compilato con ``gcc`` [gcc]_ usando
l'opzione ``-std=gnu89`` [gcc-c-dialect-options]_: il dialetto GNU
dello standard ISO C90 (con l'aggiunta di alcune funzionalità da C99)
Questo dialetto contiene diverse estensioni al linguaggio [gnu-extensions]_,
e molte di queste vengono usate sistematicamente dal kernel.
Il kernel offre un certo livello di supporto per la compilazione con ``clang``
[clang]_ e ``icc`` [icc]_ su diverse architetture, tuttavia in questo momento
il supporto non è completo e richiede delle patch aggiuntive.
Attributi
---------
Una delle estensioni più comuni e usate nel kernel sono gli attributi
[gcc-attribute-syntax]_. Gli attributi permettono di aggiungere una semantica,
definita dell'implementazione, alle entità del linguaggio (come le variabili,
le funzioni o i tipi) senza dover fare importanti modifiche sintattiche al
linguaggio stesso (come l'aggiunta di nuove parole chiave) [n2049]_.
In alcuni casi, gli attributi sono opzionali (ovvero un compilatore che non
dovesse supportarli dovrebbe produrre comunque codice corretto, anche se
più lento o che non esegue controlli aggiuntivi durante la compilazione).
Il kernel definisce alcune pseudo parole chiave (per esempio ``__pure``)
in alternativa alla sintassi GNU per gli attributi (per esempio
``__attribute__((__pure__))``) allo scopo di mostrare quali funzionalità si
possono usare e/o per accorciare il codice.
Per maggiori informazioni consultate il file d'intestazione
``include/linux/compiler_attributes.h``.
.. [c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards
.. [gcc] https://gcc.gnu.org
.. [clang] https://clang.llvm.org
.. [icc] https://software.intel.com/en-us/c-compilers
.. [gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
.. [gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
.. [gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
.. [n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf
...@@ -569,7 +569,7 @@ ACQUIRE 는 해당 오퍼레이션의 로드 부분에만 적용되고 RELEASE ...@@ -569,7 +569,7 @@ ACQUIRE 는 해당 오퍼레이션의 로드 부분에만 적용되고 RELEASE
[*] 버스 마스터링 DMA 와 일관성에 대해서는 다음을 참고하시기 바랍니다: [*] 버스 마스터링 DMA 와 일관성에 대해서는 다음을 참고하시기 바랍니다:
Documentation/PCI/pci.rst Documentation/driver-api/pci/pci.rst
Documentation/DMA-API-HOWTO.txt Documentation/DMA-API-HOWTO.txt
Documentation/DMA-API.txt Documentation/DMA-API.txt
......
# -*- coding: utf-8; mode: python -*-
project = "The Linux kernel user-space API guide"
tags.add("subproject")
latex_documents = [
('index', 'userspace-api.tex', project,
'The kernel development community', 'manual'),
]
...@@ -3781,7 +3781,7 @@ encrypted VMs. ...@@ -3781,7 +3781,7 @@ encrypted VMs.
Currently, this ioctl is used for issuing Secure Encrypted Virtualization Currently, this ioctl is used for issuing Secure Encrypted Virtualization
(SEV) commands on AMD Processors. The SEV commands are defined in (SEV) commands on AMD Processors. The SEV commands are defined in
Documentation/virtual/kvm/amd-memory-encryption.rst. Documentation/virt/kvm/amd-memory-encryption.rst.
4.111 KVM_MEMORY_ENCRYPT_REG_REGION 4.111 KVM_MEMORY_ENCRYPT_REG_REGION
......
...@@ -18,7 +18,7 @@ S390: ...@@ -18,7 +18,7 @@ S390:
number in R1. number in R1.
For further information on the S390 diagnose call as supported by KVM, For further information on the S390 diagnose call as supported by KVM,
refer to Documentation/virtual/kvm/s390-diag.txt. refer to Documentation/virt/kvm/s390-diag.txt.
PowerPC: PowerPC:
It uses R3-R10 and hypercall number in R11. R4-R11 are used as output registers. It uses R3-R10 and hypercall number in R11. R4-R11 are used as output registers.
...@@ -26,7 +26,7 @@ S390: ...@@ -26,7 +26,7 @@ S390:
KVM hypercalls uses 4 byte opcode, that are patched with 'hypercall-instructions' KVM hypercalls uses 4 byte opcode, that are patched with 'hypercall-instructions'
property inside the device tree's /hypervisor node. property inside the device tree's /hypervisor node.
For more information refer to Documentation/virtual/kvm/ppc-pv.txt For more information refer to Documentation/virt/kvm/ppc-pv.txt
MIPS: MIPS:
KVM hypercalls use the HYPCALL instruction with code 0 and the hypercall KVM hypercalls use the HYPCALL instruction with code 0 and the hypercall
......
...@@ -9,3 +9,4 @@ KVM ...@@ -9,3 +9,4 @@ KVM
amd-memory-encryption amd-memory-encryption
cpuid cpuid
vcpu-requests
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment