mirror of https://github.com/torvalds/linux.git
Merge branch 'bjorn' into docs-mw
A big set of typo fixes from Bjorn Helgaas
This commit is contained in:
commit
4e18a0b090
|
|
@ -86,7 +86,7 @@ The <EPF Device> directory can have a list of symbolic links
|
||||||
be created by the user to represent the virtual functions that are bound to
|
be created by the user to represent the virtual functions that are bound to
|
||||||
the physical function. In the above directory structure <EPF Device 11> is a
|
the physical function. In the above directory structure <EPF Device 11> is a
|
||||||
physical function and <EPF Device 31> is a virtual function. An EPF device once
|
physical function and <EPF Device 31> is a virtual function. An EPF device once
|
||||||
it's linked to another EPF device, cannot be linked to a EPC device.
|
it's linked to another EPF device, cannot be linked to an EPC device.
|
||||||
|
|
||||||
EPC Device
|
EPC Device
|
||||||
==========
|
==========
|
||||||
|
|
@ -108,7 +108,7 @@ entries corresponding to EPC device will be created by the EPC core.
|
||||||
The <EPC Device> directory will have a list of symbolic links to
|
The <EPC Device> directory will have a list of symbolic links to
|
||||||
<EPF Device>. These symbolic links should be created by the user to
|
<EPF Device>. These symbolic links should be created by the user to
|
||||||
represent the functions present in the endpoint device. Only <EPF Device>
|
represent the functions present in the endpoint device. Only <EPF Device>
|
||||||
that represents a physical function can be linked to a EPC device.
|
that represents a physical function can be linked to an EPC device.
|
||||||
|
|
||||||
The <EPC Device> directory will also have a *start* field. Once
|
The <EPC Device> directory will also have a *start* field. Once
|
||||||
"1" is written to this field, the endpoint device will be ready to
|
"1" is written to this field, the endpoint device will be ready to
|
||||||
|
|
|
||||||
|
|
@ -197,8 +197,8 @@ by the PCI endpoint function driver.
|
||||||
* pci_epf_register_driver()
|
* pci_epf_register_driver()
|
||||||
|
|
||||||
The PCI Endpoint Function driver should implement the following ops:
|
The PCI Endpoint Function driver should implement the following ops:
|
||||||
* bind: ops to perform when a EPC device has been bound to EPF device
|
* bind: ops to perform when an EPC device has been bound to EPF device
|
||||||
* unbind: ops to perform when a binding has been lost between a EPC
|
* unbind: ops to perform when a binding has been lost between an EPC
|
||||||
device and EPF device
|
device and EPF device
|
||||||
* add_cfs: optional ops to create function specific configfs
|
* add_cfs: optional ops to create function specific configfs
|
||||||
attributes
|
attributes
|
||||||
|
|
@ -251,7 +251,7 @@ pci-ep-cfs.c can be used as reference for using these APIs.
|
||||||
* pci_epf_bind()
|
* pci_epf_bind()
|
||||||
|
|
||||||
pci_epf_bind() should be invoked when the EPF device has been bound to
|
pci_epf_bind() should be invoked when the EPF device has been bound to
|
||||||
a EPC device.
|
an EPC device.
|
||||||
|
|
||||||
* pci_epf_unbind()
|
* pci_epf_unbind()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ or the RCU-protected data that it points to can change concurrently.
|
||||||
Like rcu_dereference(), when lockdep is enabled, RCU list and hlist
|
Like rcu_dereference(), when lockdep is enabled, RCU list and hlist
|
||||||
traversal primitives check for being called from within an RCU read-side
|
traversal primitives check for being called from within an RCU read-side
|
||||||
critical section. However, a lockdep expression can be passed to them
|
critical section. However, a lockdep expression can be passed to them
|
||||||
as a additional optional argument. With this lockdep expression, these
|
as an additional optional argument. With this lockdep expression, these
|
||||||
traversal primitives will complain only if the lockdep expression is
|
traversal primitives will complain only if the lockdep expression is
|
||||||
false and they are called from outside any RCU read-side critical section.
|
false and they are called from outside any RCU read-side critical section.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ warnings:
|
||||||
uncommon in large datacenter. In one memorable case some decades
|
uncommon in large datacenter. In one memorable case some decades
|
||||||
back, a CPU failed in a running system, becoming unresponsive,
|
back, a CPU failed in a running system, becoming unresponsive,
|
||||||
but not causing an immediate crash. This resulted in a series
|
but not causing an immediate crash. This resulted in a series
|
||||||
of RCU CPU stall warnings, eventually leading the realization
|
of RCU CPU stall warnings, eventually leading to the realization
|
||||||
that the CPU had failed.
|
that the CPU had failed.
|
||||||
|
|
||||||
The RCU, RCU-sched, RCU-tasks, and RCU-tasks-trace implementations have
|
The RCU, RCU-sched, RCU-tasks, and RCU-tasks-trace implementations have
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace). The higher level goal is to allow for uid-based sandboxing of system
|
||||||
services without having to give out CAP_SETUID all over the place just so that
|
services without having to give out CAP_SETUID all over the place just so that
|
||||||
non-root programs can drop to even-lesser-privileged uids. This is especially
|
non-root programs can drop to even-lesser-privileged uids. This is especially
|
||||||
relevant when one non-root daemon on the system should be allowed to spawn other
|
relevant when one non-root daemon on the system should be allowed to spawn other
|
||||||
processes as different uids, but its undesirable to give the daemon a
|
processes as different uids, but it's undesirable to give the daemon a
|
||||||
basically-root-equivalent CAP_SETUID.
|
basically-root-equivalent CAP_SETUID.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -253,7 +253,7 @@ interface.
|
||||||
Some architectures have ECC detectors for L1, L2 and L3 caches,
|
Some architectures have ECC detectors for L1, L2 and L3 caches,
|
||||||
along with DMA engines, fabric switches, main data path switches,
|
along with DMA engines, fabric switches, main data path switches,
|
||||||
interconnections, and various other hardware data paths. If the hardware
|
interconnections, and various other hardware data paths. If the hardware
|
||||||
reports it, then a edac_device device probably can be constructed to
|
reports it, then an edac_device device probably can be constructed to
|
||||||
harvest and present that to userspace.
|
harvest and present that to userspace.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ and high-level drivers that you would use:
|
||||||
================ ============ ========
|
================ ============ ========
|
||||||
|
|
||||||
All parports and all protocol drivers are probed automatically unless probe=0
|
All parports and all protocol drivers are probed automatically unless probe=0
|
||||||
parameter is used. So just "modprobe epat" is enough for a Imation SuperDisk
|
parameter is used. So just "modprobe epat" is enough for an Imation SuperDisk
|
||||||
drive to work.
|
drive to work.
|
||||||
|
|
||||||
Manual device creation::
|
Manual device creation::
|
||||||
|
|
|
||||||
|
|
@ -600,7 +600,7 @@ lock and return itself to the pool.
|
||||||
All storage within vdo is managed as 4KB blocks, but it can accept writes
|
All storage within vdo is managed as 4KB blocks, but it can accept writes
|
||||||
as small as 512 bytes. Processing a write that is smaller than 4K requires
|
as small as 512 bytes. Processing a write that is smaller than 4K requires
|
||||||
a read-modify-write operation that reads the relevant 4K block, copies the
|
a read-modify-write operation that reads the relevant 4K block, copies the
|
||||||
new data over the approriate sectors of the block, and then launches a
|
new data over the appropriate sectors of the block, and then launches a
|
||||||
write operation for the modified data block. The read and write stages of
|
write operation for the modified data block. The read and write stages of
|
||||||
this operation are nearly identical to the normal read and write
|
this operation are nearly identical to the normal read and write
|
||||||
operations, and a single data_vio is used throughout this operation.
|
operations, and a single data_vio is used throughout this operation.
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ XEON PHI specific considerations
|
||||||
command line with the 'ring3mwait=disable' command line option.
|
command line with the 'ring3mwait=disable' command line option.
|
||||||
|
|
||||||
XEON PHI is not affected by the other MDS variants and MSBDS is mitigated
|
XEON PHI is not affected by the other MDS variants and MSBDS is mitigated
|
||||||
before the CPU enters a idle state. As XEON PHI is not affected by L1TF
|
before the CPU enters an idle state. As XEON PHI is not affected by L1TF
|
||||||
either disabling SMT is not required for full protection.
|
either disabling SMT is not required for full protection.
|
||||||
|
|
||||||
.. _mds_smt_control:
|
.. _mds_smt_control:
|
||||||
|
|
|
||||||
|
|
@ -471,7 +471,7 @@ Notes on loading the dump-capture kernel:
|
||||||
performance degradation. To enable multi-cpu support, you should bring up an
|
performance degradation. To enable multi-cpu support, you should bring up an
|
||||||
SMP dump-capture kernel and specify maxcpus/nr_cpus options while loading it.
|
SMP dump-capture kernel and specify maxcpus/nr_cpus options while loading it.
|
||||||
|
|
||||||
* For s390x there are two kdump modes: If a ELF header is specified with
|
* For s390x there are two kdump modes: If an ELF header is specified with
|
||||||
the elfcorehdr= kernel parameter, it is used by the kdump kernel as it
|
the elfcorehdr= kernel parameter, it is used by the kdump kernel as it
|
||||||
is done on all other architectures. If no elfcorehdr= kernel parameter is
|
is done on all other architectures. If no elfcorehdr= kernel parameter is
|
||||||
specified, the s390x kdump kernel dynamically creates the header. The
|
specified, the s390x kdump kernel dynamically creates the header. The
|
||||||
|
|
|
||||||
|
|
@ -3700,7 +3700,7 @@
|
||||||
looking for corruption. Enabling this will
|
looking for corruption. Enabling this will
|
||||||
both detect corruption and prevent the kernel
|
both detect corruption and prevent the kernel
|
||||||
from using the memory being corrupted.
|
from using the memory being corrupted.
|
||||||
However, its intended as a diagnostic tool; if
|
However, it's intended as a diagnostic tool; if
|
||||||
repeatable BIOS-originated corruption always
|
repeatable BIOS-originated corruption always
|
||||||
affects the same memory, you can use memmap=
|
affects the same memory, you can use memmap=
|
||||||
to prevent the kernel from using that memory.
|
to prevent the kernel from using that memory.
|
||||||
|
|
@ -7382,7 +7382,7 @@
|
||||||
(converted into nanoseconds). Fast, but
|
(converted into nanoseconds). Fast, but
|
||||||
depending on the architecture, may not be
|
depending on the architecture, may not be
|
||||||
in sync between CPUs.
|
in sync between CPUs.
|
||||||
global - Event time stamps are synchronize across
|
global - Event time stamps are synchronized across
|
||||||
CPUs. May be slower than the local clock,
|
CPUs. May be slower than the local clock,
|
||||||
but better for some race conditions.
|
but better for some race conditions.
|
||||||
counter - Simple counting of events (1, 2, ..)
|
counter - Simple counting of events (1, 2, ..)
|
||||||
|
|
@ -7502,12 +7502,12 @@
|
||||||
section.
|
section.
|
||||||
|
|
||||||
trace_trigger=[trigger-list]
|
trace_trigger=[trigger-list]
|
||||||
[FTRACE] Add a event trigger on specific events.
|
[FTRACE] Add an event trigger on specific events.
|
||||||
Set a trigger on top of a specific event, with an optional
|
Set a trigger on top of a specific event, with an optional
|
||||||
filter.
|
filter.
|
||||||
|
|
||||||
The format is "trace_trigger=<event>.<trigger>[ if <filter>],..."
|
The format is "trace_trigger=<event>.<trigger>[ if <filter>],..."
|
||||||
Where more than one trigger may be specified that are comma deliminated.
|
Where more than one trigger may be specified that are comma delimited.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
|
@ -7515,7 +7515,7 @@
|
||||||
|
|
||||||
The above will enable the "stacktrace" trigger on the "sched_switch"
|
The above will enable the "stacktrace" trigger on the "sched_switch"
|
||||||
event but only trigger it if the "prev_state" of the "sched_switch"
|
event but only trigger it if the "prev_state" of the "sched_switch"
|
||||||
event is "2" (TASK_UNINTERUPTIBLE).
|
event is "2" (TASK_UNINTERRUPTIBLE).
|
||||||
|
|
||||||
See also "Event triggers" in Documentation/trace/events.rst
|
See also "Event triggers" in Documentation/trace/events.rst
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ generate, like:
|
||||||
(when available)
|
(when available)
|
||||||
|
|
||||||
Those events (see linux/sonypi.h) can be polled using the character device node
|
Those events (see linux/sonypi.h) can be polled using the character device node
|
||||||
/dev/sonypi (major 10, minor auto allocated or specified as a option).
|
/dev/sonypi (major 10, minor auto allocated or specified as an option).
|
||||||
A simple daemon which translates the jogdial movements into mouse wheel events
|
A simple daemon which translates the jogdial movements into mouse wheel events
|
||||||
can be downloaded at: <http://popies.net/sonypi/>
|
can be downloaded at: <http://popies.net/sonypi/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ Some of the features of this driver include:
|
||||||
motion compensation modes: low, medium, and high motion. Pipelines are
|
motion compensation modes: low, medium, and high motion. Pipelines are
|
||||||
defined that allow sending frames to the VDIC subdev directly from the
|
defined that allow sending frames to the VDIC subdev directly from the
|
||||||
CSI. There is also support in the future for sending frames to the
|
CSI. There is also support in the future for sending frames to the
|
||||||
VDIC from memory buffers via a output/mem2mem devices.
|
VDIC from memory buffers via output/mem2mem devices.
|
||||||
|
|
||||||
- Includes a Frame Interval Monitor (FIM) that can correct vertical sync
|
- Includes a Frame Interval Monitor (FIM) that can correct vertical sync
|
||||||
problems with the ADV718x video decoders.
|
problems with the ADV718x video decoders.
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
|
||||||
Information about the Device
|
Information about the Device
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address.
|
This chip is a Silicon Labs product. It is an I2C device, currently on 0x63 address.
|
||||||
Basically, it has transmission and signal noise level measurement features.
|
Basically, it has transmission and signal noise level measurement features.
|
||||||
|
|
||||||
The Si4713 integrates transmit functions for FM broadcast stereo transmission.
|
The Si4713 integrates transmit functions for FM broadcast stereo transmission.
|
||||||
|
|
@ -28,7 +28,7 @@ Users must comply with local regulations on radio frequency (RF) transmission.
|
||||||
Device driver description
|
Device driver description
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
There are two modules to handle this device. One is a I2C device driver
|
There are two modules to handle this device. One is an I2C device driver
|
||||||
and the other is a platform driver.
|
and the other is a platform driver.
|
||||||
|
|
||||||
The I2C device driver exports a v4l2-subdev interface to the kernel.
|
The I2C device driver exports a v4l2-subdev interface to the kernel.
|
||||||
|
|
@ -113,7 +113,7 @@ Here is a summary of them:
|
||||||
- acomp_attack_time - Sets the attack time for audio dynamic range control.
|
- acomp_attack_time - Sets the attack time for audio dynamic range control.
|
||||||
- acomp_release_time - Sets the release time for audio dynamic range control.
|
- acomp_release_time - Sets the release time for audio dynamic range control.
|
||||||
|
|
||||||
* Limiter setups audio deviation limiter feature. Once a over deviation occurs,
|
* Limiter sets up the audio deviation limiter feature. Once an over deviation occurs,
|
||||||
it is possible to adjust the front-end gain of the audio input and always
|
it is possible to adjust the front-end gain of the audio input and always
|
||||||
prevent over deviation.
|
prevent over deviation.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -357,7 +357,7 @@ The directory for the :ref:`quotas <damon_design_damos_quotas>` of the given
|
||||||
DAMON-based operation scheme.
|
DAMON-based operation scheme.
|
||||||
|
|
||||||
Under ``quotas`` directory, four files (``ms``, ``bytes``,
|
Under ``quotas`` directory, four files (``ms``, ``bytes``,
|
||||||
``reset_interval_ms``, ``effective_bytes``) and two directores (``weights`` and
|
``reset_interval_ms``, ``effective_bytes``) and two directories (``weights`` and
|
||||||
``goals``) exist.
|
``goals``) exist.
|
||||||
|
|
||||||
You can set the ``time quota`` in milliseconds, ``size quota`` in bytes, and
|
You can set the ``time quota`` in milliseconds, ``size quota`` in bytes, and
|
||||||
|
|
|
||||||
|
|
@ -109,8 +109,8 @@ uring channel. It is 2 bits. Some important codes are as follows:
|
||||||
- 2'b11: count the events which sent to the uring_ext (MATA) channel;
|
- 2'b11: count the events which sent to the uring_ext (MATA) channel;
|
||||||
- 2'b01: is the same as 2'b11;
|
- 2'b01: is the same as 2'b11;
|
||||||
- 2'b10: count the events which sent to the uring (non-MATA) channel;
|
- 2'b10: count the events which sent to the uring (non-MATA) channel;
|
||||||
- 2'b00: default value, count the events which sent to the both uring and
|
- 2'b00: default value, count the events which sent to both uring and
|
||||||
uring_ext channel;
|
uring_ext channels;
|
||||||
|
|
||||||
Users could configure IDs to count data come from specific CCL/ICL, by setting
|
Users could configure IDs to count data come from specific CCL/ICL, by setting
|
||||||
srcid_cmd & srcid_msk, and data desitined for specific CCL/ICL by setting
|
srcid_cmd & srcid_msk, and data desitined for specific CCL/ICL by setting
|
||||||
|
|
|
||||||
|
|
@ -273,7 +273,7 @@ again.
|
||||||
does nothing at all; in that case you have to manually install your kernel,
|
does nothing at all; in that case you have to manually install your kernel,
|
||||||
as outlined in the reference section.
|
as outlined in the reference section.
|
||||||
|
|
||||||
If you are running a immutable Linux distribution, check its documentation
|
If you are running an immutable Linux distribution, check its documentation
|
||||||
and the web to find out how to install your own kernel there.
|
and the web to find out how to install your own kernel there.
|
||||||
|
|
||||||
[:ref:`details<install>`]
|
[:ref:`details<install>`]
|
||||||
|
|
@ -884,7 +884,7 @@ When a build error occurs, it might be caused by some aspect of your machine's
|
||||||
setup that often can be fixed quickly; other times though the problem lies in
|
setup that often can be fixed quickly; other times though the problem lies in
|
||||||
the code and can only be fixed by a developer. A close examination of the
|
the code and can only be fixed by a developer. A close examination of the
|
||||||
failure messages coupled with some research on the internet will often tell you
|
failure messages coupled with some research on the internet will often tell you
|
||||||
which of the two it is. To perform such a investigation, restart the build
|
which of the two it is. To perform such an investigation, restart the build
|
||||||
process like this::
|
process like this::
|
||||||
|
|
||||||
make V=1
|
make V=1
|
||||||
|
|
|
||||||
|
|
@ -611,7 +611,7 @@ better place.
|
||||||
|
|
||||||
How to read the MAINTAINERS file
|
How to read the MAINTAINERS file
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
To illustrate how to use the :ref:`MAINTAINERS <maintainers>` file, lets assume
|
To illustrate how to use the :ref:`MAINTAINERS <maintainers>` file, let's assume
|
||||||
the WiFi in your Laptop suddenly misbehaves after updating the kernel. In that
|
the WiFi in your Laptop suddenly misbehaves after updating the kernel. In that
|
||||||
case it's likely an issue in the WiFi driver. Obviously it could also be some
|
case it's likely an issue in the WiFi driver. Obviously it could also be some
|
||||||
code it builds upon, but unless you suspect something like that stick to the
|
code it builds upon, but unless you suspect something like that stick to the
|
||||||
|
|
@ -1543,7 +1543,7 @@ as well, because that will speed things up.
|
||||||
|
|
||||||
And note, it helps developers a great deal if you can specify the exact version
|
And note, it helps developers a great deal if you can specify the exact version
|
||||||
that introduced the problem. Hence if possible within a reasonable time frame,
|
that introduced the problem. Hence if possible within a reasonable time frame,
|
||||||
try to find that version using vanilla kernels. Lets assume something broke when
|
try to find that version using vanilla kernels. Let's assume something broke when
|
||||||
your distributor released a update from Linux kernel 5.10.5 to 5.10.8. Then as
|
your distributor released a update from Linux kernel 5.10.5 to 5.10.8. Then as
|
||||||
instructed above go and check the latest kernel from that version line, say
|
instructed above go and check the latest kernel from that version line, say
|
||||||
5.10.9. If it shows the problem, try a vanilla 5.10.5 to ensure that no patches
|
5.10.9. If it shows the problem, try a vanilla 5.10.5 to ensure that no patches
|
||||||
|
|
|
||||||
|
|
@ -1757,7 +1757,7 @@ or all of these tasks:
|
||||||
to your bootloader's configuration.
|
to your bootloader's configuration.
|
||||||
|
|
||||||
You have to take care of some or all of the tasks yourself, if your
|
You have to take care of some or all of the tasks yourself, if your
|
||||||
distribution lacks a installkernel script or does only handle part of them.
|
distribution lacks an installkernel script or does only handle part of them.
|
||||||
Consult the distribution's documentation for details. If in doubt, install the
|
Consult the distribution's documentation for details. If in doubt, install the
|
||||||
kernel manually::
|
kernel manually::
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ ChangeLog:
|
||||||
|
|
||||||
/proc/irq/IRQ#/smp_affinity and /proc/irq/IRQ#/smp_affinity_list specify
|
/proc/irq/IRQ#/smp_affinity and /proc/irq/IRQ#/smp_affinity_list specify
|
||||||
which target CPUs are permitted for a given IRQ source. It's a bitmask
|
which target CPUs are permitted for a given IRQ source. It's a bitmask
|
||||||
(smp_affinity) or cpu list (smp_affinity_list) of allowed CPUs. It's not
|
(smp_affinity) or CPU list (smp_affinity_list) of allowed CPUs. It's not
|
||||||
allowed to turn off all CPUs, and if an IRQ controller does not support
|
allowed to turn off all CPUs, and if an IRQ controller does not support
|
||||||
IRQ affinity then the value will not change from the default of all cpus.
|
IRQ affinity then the value will not change from the default of all CPUs.
|
||||||
|
|
||||||
/proc/irq/default_smp_affinity specifies default affinity mask that applies
|
/proc/irq/default_smp_affinity specifies default affinity mask that applies
|
||||||
to all non-active IRQs. Once IRQ is allocated/activated its affinity bitmask
|
to all non-active IRQs. Once IRQ is allocated/activated its affinity bitmask
|
||||||
|
|
@ -60,7 +60,7 @@ Now lets restrict that IRQ to CPU(4-7).
|
||||||
This time around IRQ44 was delivered only to the last four processors.
|
This time around IRQ44 was delivered only to the last four processors.
|
||||||
i.e counters for the CPU0-3 did not change.
|
i.e counters for the CPU0-3 did not change.
|
||||||
|
|
||||||
Here is an example of limiting that same irq (44) to cpus 1024 to 1031::
|
Here is an example of limiting that same IRQ (44) to CPUs 1024 to 1031::
|
||||||
|
|
||||||
[root@moon 44]# echo 1024-1031 > smp_affinity_list
|
[root@moon 44]# echo 1024-1031 > smp_affinity_list
|
||||||
[root@moon 44]# cat smp_affinity_list
|
[root@moon 44]# cat smp_affinity_list
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ handlers as irqchips. I.e. in effect cascading interrupt controllers.
|
||||||
So in the past, IRQ numbers could be chosen so that they match the
|
So in the past, IRQ numbers could be chosen so that they match the
|
||||||
hardware IRQ line into the root interrupt controller (i.e. the
|
hardware IRQ line into the root interrupt controller (i.e. the
|
||||||
component actually firing the interrupt line to the CPU). Nowadays,
|
component actually firing the interrupt line to the CPU). Nowadays,
|
||||||
this number is just a number and the number loose all kind of
|
this number is just a number and the number has no
|
||||||
correspondence to hardware interrupt numbers.
|
relationship to hardware interrupt numbers.
|
||||||
|
|
||||||
For this reason, we need a mechanism to separate controller-local
|
For this reason, we need a mechanism to separate controller-local
|
||||||
interrupt numbers, called hardware IRQs, from Linux IRQ numbers.
|
interrupt numbers, called hardware IRQs, from Linux IRQ numbers.
|
||||||
|
|
@ -77,15 +77,15 @@ Once a mapping has been established, it can be retrieved or used via a
|
||||||
variety of methods:
|
variety of methods:
|
||||||
|
|
||||||
- irq_resolve_mapping() returns a pointer to the irq_desc structure
|
- irq_resolve_mapping() returns a pointer to the irq_desc structure
|
||||||
for a given domain and hwirq number, and NULL if there was no
|
for a given domain and hwirq number, or NULL if there was no
|
||||||
mapping.
|
mapping.
|
||||||
- irq_find_mapping() returns a Linux IRQ number for a given domain and
|
- irq_find_mapping() returns a Linux IRQ number for a given domain and
|
||||||
hwirq number, and 0 if there was no mapping
|
hwirq number, or 0 if there was no mapping
|
||||||
- generic_handle_domain_irq() handles an interrupt described by a
|
- generic_handle_domain_irq() handles an interrupt described by a
|
||||||
domain and a hwirq number
|
domain and a hwirq number
|
||||||
|
|
||||||
Note that irq domain lookups must happen in contexts that are
|
Note that irq_domain lookups must happen in contexts that are
|
||||||
compatible with a RCU read-side critical section.
|
compatible with an RCU read-side critical section.
|
||||||
|
|
||||||
The irq_create_mapping() function must be called *at least once*
|
The irq_create_mapping() function must be called *at least once*
|
||||||
before any call to irq_find_mapping(), lest the descriptor will not
|
before any call to irq_find_mapping(), lest the descriptor will not
|
||||||
|
|
@ -100,7 +100,7 @@ Types of irq_domain Mappings
|
||||||
============================
|
============================
|
||||||
|
|
||||||
There are several mechanisms available for reverse mapping from hwirq
|
There are several mechanisms available for reverse mapping from hwirq
|
||||||
to Linux irq, and each mechanism uses a different allocation function.
|
to Linux IRQ, and each mechanism uses a different allocation function.
|
||||||
Which reverse map type should be used depends on the use case. Each
|
Which reverse map type should be used depends on the use case. Each
|
||||||
of the reverse map types are described below:
|
of the reverse map types are described below:
|
||||||
|
|
||||||
|
|
@ -111,13 +111,13 @@ Linear
|
||||||
|
|
||||||
irq_domain_create_linear()
|
irq_domain_create_linear()
|
||||||
|
|
||||||
The linear reverse map maintains a fixed size table indexed by the
|
The linear reverse map maintains a fixed-size table indexed by the
|
||||||
hwirq number. When a hwirq is mapped, an irq_desc is allocated for
|
hwirq number. When a hwirq is mapped, an irq_desc is allocated for
|
||||||
the hwirq, and the IRQ number is stored in the table.
|
the hwirq, and the IRQ number is stored in the table.
|
||||||
|
|
||||||
The Linear map is a good choice when the maximum number of hwirqs is
|
The Linear map is a good choice when the maximum number of hwirqs is
|
||||||
fixed and a relatively small number (~ < 256). The advantages of this
|
fixed and a relatively small number (~ < 256). The advantages of this
|
||||||
map are fixed time lookup for IRQ numbers, and irq_descs are only
|
map are fixed-time lookup for IRQ numbers, and irq_descs are only
|
||||||
allocated for in-use IRQs. The disadvantage is that the table must be
|
allocated for in-use IRQs. The disadvantage is that the table must be
|
||||||
as large as the largest possible hwirq number.
|
as large as the largest possible hwirq number.
|
||||||
|
|
||||||
|
|
@ -134,7 +134,7 @@ The irq_domain maintains a radix tree map from hwirq numbers to Linux
|
||||||
IRQs. When an hwirq is mapped, an irq_desc is allocated and the
|
IRQs. When an hwirq is mapped, an irq_desc is allocated and the
|
||||||
hwirq is used as the lookup key for the radix tree.
|
hwirq is used as the lookup key for the radix tree.
|
||||||
|
|
||||||
The tree map is a good choice if the hwirq number can be very large
|
The Tree map is a good choice if the hwirq number can be very large
|
||||||
since it doesn't need to allocate a table as large as the largest
|
since it doesn't need to allocate a table as large as the largest
|
||||||
hwirq number. The disadvantage is that hwirq to IRQ number lookup is
|
hwirq number. The disadvantage is that hwirq to IRQ number lookup is
|
||||||
dependent on how many entries are in the table.
|
dependent on how many entries are in the table.
|
||||||
|
|
@ -169,10 +169,10 @@ Legacy
|
||||||
|
|
||||||
The Legacy mapping is a special case for drivers that already have a
|
The Legacy mapping is a special case for drivers that already have a
|
||||||
range of irq_descs allocated for the hwirqs. It is used when the
|
range of irq_descs allocated for the hwirqs. It is used when the
|
||||||
driver cannot be immediately converted to use the linear mapping. For
|
driver cannot be immediately converted to use the Linear mapping. For
|
||||||
example, many embedded system board support files use a set of #defines
|
example, many embedded system board support files use a set of #defines
|
||||||
for IRQ numbers that are passed to struct device registrations. In that
|
for IRQ numbers that are passed to struct device registrations. In that
|
||||||
case the Linux IRQ numbers cannot be dynamically assigned and the legacy
|
case the Linux IRQ numbers cannot be dynamically assigned and the Legacy
|
||||||
mapping should be used.
|
mapping should be used.
|
||||||
|
|
||||||
As the name implies, the \*_legacy() functions are deprecated and only
|
As the name implies, the \*_legacy() functions are deprecated and only
|
||||||
|
|
@ -180,15 +180,15 @@ exist to ease the support of ancient platforms. No new users should be
|
||||||
added. Same goes for the \*_simple() functions when their use results
|
added. Same goes for the \*_simple() functions when their use results
|
||||||
in the legacy behaviour.
|
in the legacy behaviour.
|
||||||
|
|
||||||
The legacy map assumes a contiguous range of IRQ numbers has already
|
The Legacy map assumes a contiguous range of IRQ numbers has already
|
||||||
been allocated for the controller and that the IRQ number can be
|
been allocated for the controller and that the IRQ number can be
|
||||||
calculated by adding a fixed offset to the hwirq number, and
|
calculated by adding a fixed offset to the hwirq number, and
|
||||||
visa-versa. The disadvantage is that it requires the interrupt
|
visa-versa. The disadvantage is that it requires the interrupt
|
||||||
controller to manage IRQ allocations and it requires an irq_desc to be
|
controller to manage IRQ allocations and it requires an irq_desc to be
|
||||||
allocated for every hwirq, even if it is unused.
|
allocated for every hwirq, even if it is unused.
|
||||||
|
|
||||||
The legacy map should only be used if fixed IRQ mappings must be
|
The Legacy map should only be used if fixed IRQ mappings must be
|
||||||
supported. For example, ISA controllers would use the legacy map for
|
supported. For example, ISA controllers would use the Legacy map for
|
||||||
mapping Linux IRQs 0-15 so that existing ISA drivers get the correct IRQ
|
mapping Linux IRQs 0-15 so that existing ISA drivers get the correct IRQ
|
||||||
numbers.
|
numbers.
|
||||||
|
|
||||||
|
|
@ -197,7 +197,7 @@ which will use a legacy domain only if an IRQ range is supplied by the
|
||||||
system and will otherwise use a linear domain mapping. The semantics of
|
system and will otherwise use a linear domain mapping. The semantics of
|
||||||
this call are such that if an IRQ range is specified then descriptors
|
this call are such that if an IRQ range is specified then descriptors
|
||||||
will be allocated on-the-fly for it, and if no range is specified it
|
will be allocated on-the-fly for it, and if no range is specified it
|
||||||
will fall through to irq_domain_create_linear() which means *no* irq
|
will fall through to irq_domain_create_linear() which means *no* IRQ
|
||||||
descriptors will be allocated.
|
descriptors will be allocated.
|
||||||
|
|
||||||
A typical use case for simple domains is where an irqchip provider
|
A typical use case for simple domains is where an irqchip provider
|
||||||
|
|
@ -214,7 +214,7 @@ Hierarchy IRQ Domain
|
||||||
|
|
||||||
On some architectures, there may be multiple interrupt controllers
|
On some architectures, there may be multiple interrupt controllers
|
||||||
involved in delivering an interrupt from the device to the target CPU.
|
involved in delivering an interrupt from the device to the target CPU.
|
||||||
Let's look at a typical interrupt delivering path on x86 platforms::
|
Let's look at a typical interrupt delivery path on x86 platforms::
|
||||||
|
|
||||||
Device --> IOAPIC -> Interrupt remapping Controller -> Local APIC -> CPU
|
Device --> IOAPIC -> Interrupt remapping Controller -> Local APIC -> CPU
|
||||||
|
|
||||||
|
|
@ -227,8 +227,8 @@ There are three interrupt controllers involved:
|
||||||
To support such a hardware topology and make software architecture match
|
To support such a hardware topology and make software architecture match
|
||||||
hardware architecture, an irq_domain data structure is built for each
|
hardware architecture, an irq_domain data structure is built for each
|
||||||
interrupt controller and those irq_domains are organized into hierarchy.
|
interrupt controller and those irq_domains are organized into hierarchy.
|
||||||
When building irq_domain hierarchy, the irq_domain near to the device is
|
When building irq_domain hierarchy, the irq_domain nearest the device is
|
||||||
child and the irq_domain near to CPU is parent. So a hierarchy structure
|
child and the irq_domain nearest the CPU is parent. So a hierarchy structure
|
||||||
as below will be built for the example above::
|
as below will be built for the example above::
|
||||||
|
|
||||||
CPU Vector irq_domain (root irq_domain to manage CPU vectors)
|
CPU Vector irq_domain (root irq_domain to manage CPU vectors)
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ cache_strategy=%s Select a strategy for cached decompression from now on:
|
||||||
cluster for further reading. It still does
|
cluster for further reading. It still does
|
||||||
in-place I/O decompression for the rest
|
in-place I/O decompression for the rest
|
||||||
compressed physical clusters;
|
compressed physical clusters;
|
||||||
readaround Cache the both ends of incomplete compressed
|
readaround Cache both ends of incomplete compressed
|
||||||
physical clusters for further reading.
|
physical clusters for further reading.
|
||||||
It still does in-place I/O decompression
|
It still does in-place I/O decompression
|
||||||
for the rest compressed physical clusters.
|
for the rest compressed physical clusters.
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ go_unlocked Yes No
|
||||||
Operations must not drop either the bit lock or the spinlock
|
Operations must not drop either the bit lock or the spinlock
|
||||||
if its held on entry. go_dump and do_demote_ok must never block.
|
if its held on entry. go_dump and do_demote_ok must never block.
|
||||||
Note that go_dump will only be called if the glock's state
|
Note that go_dump will only be called if the glock's state
|
||||||
indicates that it is caching uptodate data.
|
indicates that it is caching up-to-date data.
|
||||||
|
|
||||||
Glock locking order within GFS2:
|
Glock locking order within GFS2:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ are case sensitive, so for example when you create a file FOO, you can use
|
||||||
'cat FOO', 'cat Foo', 'cat foo' or 'cat F*' but not 'cat f*'. Note, that you
|
'cat FOO', 'cat Foo', 'cat foo' or 'cat F*' but not 'cat f*'. Note, that you
|
||||||
also won't be able to compile linux kernel (and maybe other things) on HPFS
|
also won't be able to compile linux kernel (and maybe other things) on HPFS
|
||||||
because kernel creates different files with names like bootsect.S and
|
because kernel creates different files with names like bootsect.S and
|
||||||
bootsect.s. When searching for file thats name has characters >= 128, codepages
|
bootsect.s. When searching for file whose name has characters >= 128, codepages
|
||||||
are used - see below.
|
are used - see below.
|
||||||
OS/2 ignores dots and spaces at the end of file name, so this driver does as
|
OS/2 ignores dots and spaces at the end of file name, so this driver does as
|
||||||
well. If you create 'a. ...', the file 'a' will be created, but you can still
|
well. If you create 'a. ...', the file 'a' will be created, but you can still
|
||||||
|
|
|
||||||
|
|
@ -563,7 +563,7 @@ this would be dependent on number of cores the benchmark is run on.
|
||||||
depending on # of threads:
|
depending on # of threads:
|
||||||
|
|
||||||
For the same SKU in #1, a 'single thread, with 10% bandwidth' and '4
|
For the same SKU in #1, a 'single thread, with 10% bandwidth' and '4
|
||||||
thread, with 10% bandwidth' can consume upto 10GBps and 40GBps although
|
thread, with 10% bandwidth' can consume up to 10GBps and 40GBps although
|
||||||
they have same percentage bandwidth of 10%. This is simply because as
|
they have same percentage bandwidth of 10%. This is simply because as
|
||||||
threads start using more cores in an rdtgroup, the actual bandwidth may
|
threads start using more cores in an rdtgroup, the actual bandwidth may
|
||||||
increase or vary although user specified bandwidth percentage is same.
|
increase or vary although user specified bandwidth percentage is same.
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,7 @@ filesystem so that it can apply pending filesystem updates to the staging
|
||||||
information.
|
information.
|
||||||
Once the scan is done, the owning object is re-locked, the live data is used to
|
Once the scan is done, the owning object is re-locked, the live data is used to
|
||||||
write a new ondisk structure, and the repairs are committed atomically.
|
write a new ondisk structure, and the repairs are committed atomically.
|
||||||
The hooks are disabled and the staging staging area is freed.
|
The hooks are disabled and the staging area is freed.
|
||||||
Finally, the storage from the old data structure are carefully reaped.
|
Finally, the storage from the old data structure are carefully reaped.
|
||||||
|
|
||||||
Introducing concurrency helps online repair avoid various locking problems, but
|
Introducing concurrency helps online repair avoid various locking problems, but
|
||||||
|
|
@ -2185,7 +2185,7 @@ The chapter about :ref:`secondary metadata<secondary_metadata>` mentioned that
|
||||||
checking and repairing of secondary metadata commonly requires coordination
|
checking and repairing of secondary metadata commonly requires coordination
|
||||||
between a live metadata scan of the filesystem and writer threads that are
|
between a live metadata scan of the filesystem and writer threads that are
|
||||||
updating that metadata.
|
updating that metadata.
|
||||||
Keeping the scan data up to date requires requires the ability to propagate
|
Keeping the scan data up to date requires the ability to propagate
|
||||||
metadata updates from the filesystem into the data being collected by the scan.
|
metadata updates from the filesystem into the data being collected by the scan.
|
||||||
This *can* be done by appending concurrent updates into a separate log file and
|
This *can* be done by appending concurrent updates into a separate log file and
|
||||||
applying them before writing the new metadata to disk, but this leads to
|
applying them before writing the new metadata to disk, but this leads to
|
||||||
|
|
|
||||||
|
|
@ -539,7 +539,7 @@ CAN Filter Usage Optimisation
|
||||||
The CAN filters are processed in per-device filter lists at CAN frame
|
The CAN filters are processed in per-device filter lists at CAN frame
|
||||||
reception time. To reduce the number of checks that need to be performed
|
reception time. To reduce the number of checks that need to be performed
|
||||||
while walking through the filter lists the CAN core provides an optimized
|
while walking through the filter lists the CAN core provides an optimized
|
||||||
filter handling when the filter subscription focusses on a single CAN ID.
|
filter handling when the filter subscription focuses on a single CAN ID.
|
||||||
|
|
||||||
For the possible 2048 SFF CAN identifiers the identifier is used as an index
|
For the possible 2048 SFF CAN identifiers the identifier is used as an index
|
||||||
to access the corresponding subscription list without any further checks.
|
to access the corresponding subscription list without any further checks.
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ Port's netdev devices have to be in UP before joining to the bridge to avoid
|
||||||
overwriting of bridge configuration as CPSW switch driver completely reloads its
|
overwriting of bridge configuration as CPSW switch driver completely reloads its
|
||||||
configuration when first port changes its state to UP.
|
configuration when first port changes its state to UP.
|
||||||
|
|
||||||
When the both interfaces joined the bridge - CPSW switch driver will enable
|
When both interfaces have joined the bridge - CPSW switch driver will enable
|
||||||
marking packets with offload_fwd_mark flag.
|
marking packets with offload_fwd_mark flag.
|
||||||
|
|
||||||
All configuration is implemented via switchdev API.
|
All configuration is implemented via switchdev API.
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ Port's netdev devices have to be in UP before joining to the bridge to avoid
|
||||||
overwriting of bridge configuration as CPSW switch driver copletly reloads its
|
overwriting of bridge configuration as CPSW switch driver copletly reloads its
|
||||||
configuration when first Port changes its state to UP.
|
configuration when first Port changes its state to UP.
|
||||||
|
|
||||||
When the both interfaces joined the bridge - CPSW switch driver will enable
|
When both interfaces have joined the bridge - CPSW switch driver will enable
|
||||||
marking packets with offload_fwd_mark flag unless "ale_bypass=0"
|
marking packets with offload_fwd_mark flag unless "ale_bypass=0"
|
||||||
|
|
||||||
All configuration is implemented via switchdev API.
|
All configuration is implemented via switchdev API.
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ The send path
|
||||||
rds_sendmsg()
|
rds_sendmsg()
|
||||||
- struct rds_message built from incoming data
|
- struct rds_message built from incoming data
|
||||||
- CMSGs parsed (e.g. RDMA ops)
|
- CMSGs parsed (e.g. RDMA ops)
|
||||||
- transport connection alloced and connected if not already
|
- transport connection allocated and connected if not already
|
||||||
- rds_message placed on send queue
|
- rds_message placed on send queue
|
||||||
- send worker awoken
|
- send worker awoken
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -472,7 +472,7 @@ in the device tree from the root bridge to a leaf device contains both of them).
|
||||||
The pci_pm_suspend_noirq() routine is executed after suspend_device_irqs() has
|
The pci_pm_suspend_noirq() routine is executed after suspend_device_irqs() has
|
||||||
been called, which means that the device driver's interrupt handler won't be
|
been called, which means that the device driver's interrupt handler won't be
|
||||||
invoked while this routine is running. It first checks if the device's driver
|
invoked while this routine is running. It first checks if the device's driver
|
||||||
implements legacy PCI suspends routines (Section 3), in which case the legacy
|
implements legacy PCI suspend routines (Section 3), in which case the legacy
|
||||||
late suspend routine is called and its result is returned (the standard
|
late suspend routine is called and its result is returned (the standard
|
||||||
configuration registers of the device are saved if the driver's callback hasn't
|
configuration registers of the device are saved if the driver's callback hasn't
|
||||||
done that). Second, if the device driver's struct dev_pm_ops object is not
|
done that). Second, if the device driver's struct dev_pm_ops object is not
|
||||||
|
|
@ -544,7 +544,7 @@ result is then returned).
|
||||||
The resume phase is carried out asynchronously for PCI devices, like the
|
The resume phase is carried out asynchronously for PCI devices, like the
|
||||||
suspend phase described above, which means that if two PCI devices don't depend
|
suspend phase described above, which means that if two PCI devices don't depend
|
||||||
on each other in a known way, the pci_pm_resume() routine may be executed for
|
on each other in a known way, the pci_pm_resume() routine may be executed for
|
||||||
the both of them in parallel.
|
both of them in parallel.
|
||||||
|
|
||||||
The pci_pm_complete() routine only executes the device driver's pm->complete()
|
The pci_pm_complete() routine only executes the device driver's pm->complete()
|
||||||
callback, if defined.
|
callback, if defined.
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ infrastructure uses it internally? And where do they share common code?
|
||||||
|
|
||||||
Well, a picture is worth a thousand words... So ASCII art follows :-)
|
Well, a picture is worth a thousand words... So ASCII art follows :-)
|
||||||
|
|
||||||
[This depicts the current design in the kernel, and focusses only on the
|
[This depicts the current design in the kernel, and focuses only on the
|
||||||
interactions involving the freezer and CPU hotplug and also tries to explain
|
interactions involving the freezer and CPU hotplug and also tries to explain
|
||||||
the locking involved. It outlines the notifications involved as well.
|
the locking involved. It outlines the notifications involved as well.
|
||||||
But please note that here, only the call paths are illustrated, with the aim
|
But please note that here, only the call paths are illustrated, with the aim
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ Same as ftrace, the registered callbacks will start being called some time
|
||||||
after the register_fprobe() is called and before it returns. See
|
after the register_fprobe() is called and before it returns. See
|
||||||
:file:`Documentation/trace/ftrace.rst`.
|
:file:`Documentation/trace/ftrace.rst`.
|
||||||
|
|
||||||
Also, the unregister_fprobe() will guarantee that the both enter and exit
|
Also, the unregister_fprobe() will guarantee that both enter and exit
|
||||||
handlers are no longer being called by functions after unregister_fprobe()
|
handlers are no longer being called by functions after unregister_fprobe()
|
||||||
returns as same as unregister_ftrace_function().
|
returns as same as unregister_ftrace_function().
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@ FTRACE_OPS_FL_RECURSION
|
||||||
Note, if this flag is set, then the callback will always be called
|
Note, if this flag is set, then the callback will always be called
|
||||||
with preemption disabled. If it is not set, then it is possible
|
with preemption disabled. If it is not set, then it is possible
|
||||||
(but not guaranteed) that the callback will be called in
|
(but not guaranteed) that the callback will be called in
|
||||||
preemptable context.
|
preemptible context.
|
||||||
|
|
||||||
FTRACE_OPS_FL_IPMODIFY
|
FTRACE_OPS_FL_IPMODIFY
|
||||||
Requires FTRACE_OPS_FL_SAVE_REGS set. If the callback is to "hijack"
|
Requires FTRACE_OPS_FL_SAVE_REGS set. If the callback is to "hijack"
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ disabled and enabled, as well as for preemption and from a time
|
||||||
a task is woken to the task is actually scheduled in.
|
a task is woken to the task is actually scheduled in.
|
||||||
|
|
||||||
One of the most common uses of ftrace is the event tracing.
|
One of the most common uses of ftrace is the event tracing.
|
||||||
Throughout the kernel is hundreds of static event points that
|
Throughout the kernel are hundreds of static event points that
|
||||||
can be enabled via the tracefs file system to see what is
|
can be enabled via the tracefs file system to see what is
|
||||||
going on in certain parts of the kernel.
|
going on in certain parts of the kernel.
|
||||||
|
|
||||||
|
|
@ -383,7 +383,7 @@ of ftrace. Here is a list of some of the key files:
|
||||||
not be listed in this count.
|
not be listed in this count.
|
||||||
|
|
||||||
If the callback registered to be traced by a function with
|
If the callback registered to be traced by a function with
|
||||||
the "save regs" attribute (thus even more overhead), a 'R'
|
the "save regs" attribute (thus even more overhead), an 'R'
|
||||||
will be displayed on the same line as the function that
|
will be displayed on the same line as the function that
|
||||||
is returning registers.
|
is returning registers.
|
||||||
|
|
||||||
|
|
@ -392,7 +392,7 @@ of ftrace. Here is a list of some of the key files:
|
||||||
an 'I' will be displayed on the same line as the function that
|
an 'I' will be displayed on the same line as the function that
|
||||||
can be overridden.
|
can be overridden.
|
||||||
|
|
||||||
If a non ftrace trampoline is attached (BPF) a 'D' will be displayed.
|
If a non-ftrace trampoline is attached (BPF) a 'D' will be displayed.
|
||||||
Note, normal ftrace trampolines can also be attached, but only one
|
Note, normal ftrace trampolines can also be attached, but only one
|
||||||
"direct" trampoline can be attached to a given function at a time.
|
"direct" trampoline can be attached to a given function at a time.
|
||||||
|
|
||||||
|
|
@ -402,7 +402,7 @@ of ftrace. Here is a list of some of the key files:
|
||||||
|
|
||||||
If a function had either the "ip modify" or a "direct" call attached to
|
If a function had either the "ip modify" or a "direct" call attached to
|
||||||
it in the past, a 'M' will be shown. This flag is never cleared. It is
|
it in the past, a 'M' will be shown. This flag is never cleared. It is
|
||||||
used to know if a function was every modified by the ftrace infrastructure,
|
used to know if a function was ever modified by the ftrace infrastructure,
|
||||||
and can be used for debugging.
|
and can be used for debugging.
|
||||||
|
|
||||||
If the architecture supports it, it will also show what callback
|
If the architecture supports it, it will also show what callback
|
||||||
|
|
@ -418,7 +418,7 @@ of ftrace. Here is a list of some of the key files:
|
||||||
|
|
||||||
This file contains all the functions that ever had a function callback
|
This file contains all the functions that ever had a function callback
|
||||||
to it via the ftrace infrastructure. It has the same format as
|
to it via the ftrace infrastructure. It has the same format as
|
||||||
enabled_functions but shows all functions that have every been
|
enabled_functions but shows all functions that have ever been
|
||||||
traced.
|
traced.
|
||||||
|
|
||||||
To see any function that has every been modified by "ip modify" or a
|
To see any function that has every been modified by "ip modify" or a
|
||||||
|
|
@ -517,7 +517,7 @@ of ftrace. Here is a list of some of the key files:
|
||||||
Whenever an event is recorded into the ring buffer, a
|
Whenever an event is recorded into the ring buffer, a
|
||||||
"timestamp" is added. This stamp comes from a specified
|
"timestamp" is added. This stamp comes from a specified
|
||||||
clock. By default, ftrace uses the "local" clock. This
|
clock. By default, ftrace uses the "local" clock. This
|
||||||
clock is very fast and strictly per cpu, but on some
|
clock is very fast and strictly per CPU, but on some
|
||||||
systems it may not be monotonic with respect to other
|
systems it may not be monotonic with respect to other
|
||||||
CPUs. In other words, the local clocks may not be in sync
|
CPUs. In other words, the local clocks may not be in sync
|
||||||
with local clocks on other CPUs.
|
with local clocks on other CPUs.
|
||||||
|
|
@ -868,7 +868,7 @@ Here is the list of current tracers that may be configured.
|
||||||
|
|
||||||
"mmiotrace"
|
"mmiotrace"
|
||||||
|
|
||||||
A special tracer that is used to trace binary module.
|
A special tracer that is used to trace binary modules.
|
||||||
It will trace all the calls that a module makes to the
|
It will trace all the calls that a module makes to the
|
||||||
hardware. Everything it writes and reads from the I/O
|
hardware. Everything it writes and reads from the I/O
|
||||||
as well.
|
as well.
|
||||||
|
|
|
||||||
|
|
@ -840,7 +840,7 @@ Extended error information
|
||||||
|
|
||||||
The compound key examples used a key and a sum value (hitcount) to
|
The compound key examples used a key and a sum value (hitcount) to
|
||||||
sort the output, but we can just as easily use two keys instead.
|
sort the output, but we can just as easily use two keys instead.
|
||||||
Here's an example where we use a compound key composed of the the
|
Here's an example where we use a compound key composed of the
|
||||||
common_pid and size event fields. Sorting with pid as the primary
|
common_pid and size event fields. Sorting with pid as the primary
|
||||||
key and 'size' as the secondary key allows us to display an
|
key and 'size' as the secondary key allows us to display an
|
||||||
ordered summary of the recvfrom sizes, with counts, received by
|
ordered summary of the recvfrom sizes, with counts, received by
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue