mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-23 23:50:51 +07:00
This pull contains a series of warning fixes from Mauro; once applied, the
number of warnings from the once-noisy docs build process is nearly zero. Getting to this point has required a lot of work; once there, hopefully we can keep things that way. I have packaged this as a separate pull because it does a fair amount of reaching outside of Documentation/. The changes are all in comments and in code placement. It's all been in linux-next since last week. -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEIw+MvkEiF49krdp9F0NaE2wMflgFAl+hscQPHGNvcmJldEBs d24ubmV0AAoJEBdDWhNsDH5YgZAH/0JeDA/1VLZYYTmdABz8mjBZsoW9tyPGGztF nsh5ykdHhL3MeTRwumW5armLVrfKhd1XT+nIzD7OcWlqu+RDOvQ5I95rahr473hP 1SHTjqm3/AlJwQoeS72X5U6QEJQ58e2IwCbP23H3x7I3Q3snEA/HhswzxurfoB/Z j81YzDV2YPEc0LJWZ5Vn0NEdwP8cdpFv5rojsQmepq7K0yJ7tEHb7/u2cEuUBgXS 8LcYCNPLpiN+q5N8uQ5oDjIUNdLQvP03kgKtQWiCTr4BRydOrDlJie28LIedamEz anu7UfaVK4bxn+ugRI0g2+aWQKux81ULCinKUWmLRNbcxjhaQqQ= =hDfp -----END PGP SIGNATURE----- Merge tag 'docs-5.10-warnings' of git://git.lwn.net/linux Pull documentation build warning fixes from Jonathan Corbet: "This contains a series of warning fixes from Mauro; once applied, the number of warnings from the once-noisy docs build process is nearly zero. Getting to this point has required a lot of work; once there, hopefully we can keep things that way. I have packaged this as a separate pull because it does a fair amount of reaching outside of Documentation/. The changes are all in comments and in code placement. It's all been in linux-next since last week" * tag 'docs-5.10-warnings' of git://git.lwn.net/linux: (24 commits) docs: SafeSetID: fix a warning amdgpu: fix a few kernel-doc markup issues selftests: kselftest_harness.h: fix kernel-doc markups drm: amdgpu_dm: fix a typo gpu: docs: amdgpu.rst: get rid of wrong kernel-doc markups drm: amdgpu: kernel-doc: update some adev parameters docs: fs: api-summary.rst: get rid of kernel-doc include IB/srpt: docs: add a description for cq_size member locking/refcount: move kernel-doc markups to the proper place docs: lockdep-design: fix some warning issues MAINTAINERS: fix broken doc refs due to yaml conversion ice: docs fix a devlink info that broke a table crypto: sun8x-ce*: update entries to its documentation net: phy: remove kernel-doc duplication mm: pagemap.h: fix two kernel-doc markups blk-mq: docs: add kernel-doc description for a new struct member docs: userspace-api: add iommu.rst to the index file docs: hwmon: mp2975.rst: address some html build warnings docs: net: statistics.rst: remove a duplicated kernel-doc docs: kasan.rst: add two missing blank lines ...
This commit is contained in:
commit
e6b0bd61a7
@ -107,7 +107,7 @@ for a UID/GID will prevent that UID/GID from obtaining auxiliary setid
|
|||||||
privileges, such as allowing a user to set up user namespace UID/GID mappings.
|
privileges, such as allowing a user to set up user namespace UID/GID mappings.
|
||||||
|
|
||||||
Note on GID policies and setgroups()
|
Note on GID policies and setgroups()
|
||||||
==================
|
====================================
|
||||||
In v5.9 we are adding support for limiting CAP_SETGID privileges as was done
|
In v5.9 we are adding support for limiting CAP_SETGID privileges as was done
|
||||||
previously for CAP_SETUID. However, for compatibility with common sandboxing
|
previously for CAP_SETUID. However, for compatibility with common sandboxing
|
||||||
related code conventions in userspace, we currently allow arbitrary
|
related code conventions in userspace, we currently allow arbitrary
|
||||||
|
@ -300,6 +300,7 @@ Note:
|
|||||||
0: 0 1 2 3 4 5 6 7
|
0: 0 1 2 3 4 5 6 7
|
||||||
RSS hash key:
|
RSS hash key:
|
||||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8:43:e3:c9:0c:fd:17:55:c2:3a:4d:69:ed:f1:42:89
|
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8:43:e3:c9:0c:fd:17:55:c2:3a:4d:69:ed:f1:42:89
|
||||||
|
|
||||||
netdev_tstamp_prequeue
|
netdev_tstamp_prequeue
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ if major >= 3:
|
|||||||
support for Sphinx v3.0 and above is brand new. Be prepared for
|
support for Sphinx v3.0 and above is brand new. Be prepared for
|
||||||
possible issues in the generated output.
|
possible issues in the generated output.
|
||||||
''')
|
''')
|
||||||
if minor > 0 or patch >= 2:
|
if (major > 3) or (minor > 0 or patch >= 2):
|
||||||
# Sphinx c function parser is more pedantic with regards to type
|
# Sphinx c function parser is more pedantic with regards to type
|
||||||
# checking. Due to that, having macros at c:function cause problems.
|
# checking. Due to that, having macros at c:function cause problems.
|
||||||
# Those needed to be scaped by using c_id_attributes[] array
|
# Those needed to be scaped by using c_id_attributes[] array
|
||||||
|
@ -295,11 +295,13 @@ print the number of the test and the status of the test:
|
|||||||
pass::
|
pass::
|
||||||
|
|
||||||
ok 28 - kmalloc_double_kzfree
|
ok 28 - kmalloc_double_kzfree
|
||||||
|
|
||||||
or, if kmalloc failed::
|
or, if kmalloc failed::
|
||||||
|
|
||||||
# kmalloc_large_oob_right: ASSERTION FAILED at lib/test_kasan.c:163
|
# kmalloc_large_oob_right: ASSERTION FAILED at lib/test_kasan.c:163
|
||||||
Expected ptr is not null, but is
|
Expected ptr is not null, but is
|
||||||
not ok 4 - kmalloc_large_oob_right
|
not ok 4 - kmalloc_large_oob_right
|
||||||
|
|
||||||
or, if a KASAN report was expected, but not found::
|
or, if a KASAN report was expected, but not found::
|
||||||
|
|
||||||
# kmalloc_double_kzfree: EXPECTATION FAILED at lib/test_kasan.c:629
|
# kmalloc_double_kzfree: EXPECTATION FAILED at lib/test_kasan.c:629
|
||||||
|
@ -4,7 +4,7 @@ Clock control registers reside in different Hi6220 system controllers,
|
|||||||
please refer the following document to know more about the binding rules
|
please refer the following document to know more about the binding rules
|
||||||
for these system controllers:
|
for these system controllers:
|
||||||
|
|
||||||
Documentation/devicetree/bindings/arm/hisilicon/hisilicon.txt
|
Documentation/devicetree/bindings/arm/hisilicon/hisilicon.yaml
|
||||||
|
|
||||||
Required Properties:
|
Required Properties:
|
||||||
|
|
||||||
|
@ -86,9 +86,6 @@ Other Functions
|
|||||||
.. kernel-doc:: fs/dax.c
|
.. kernel-doc:: fs/dax.c
|
||||||
:export:
|
:export:
|
||||||
|
|
||||||
.. kernel-doc:: fs/direct-io.c
|
|
||||||
:export:
|
|
||||||
|
|
||||||
.. kernel-doc:: fs/libfs.c
|
.. kernel-doc:: fs/libfs.c
|
||||||
:export:
|
:export:
|
||||||
|
|
||||||
|
@ -83,10 +83,6 @@ AMDGPU XGMI Support
|
|||||||
===================
|
===================
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
|
||||||
:doc: AMDGPU XGMI Support
|
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
|
|
||||||
:internal:
|
|
||||||
|
|
||||||
AMDGPU RAS Support
|
AMDGPU RAS Support
|
||||||
==================
|
==================
|
||||||
@ -124,9 +120,6 @@ RAS VRAM Bad Pages sysfs Interface
|
|||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
||||||
:doc: AMDGPU RAS sysfs gpu_vram_bad_pages Interface
|
:doc: AMDGPU RAS sysfs gpu_vram_bad_pages Interface
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
|
||||||
:internal:
|
|
||||||
|
|
||||||
Sample Code
|
Sample Code
|
||||||
-----------
|
-----------
|
||||||
Sample code for testing error injection can be found here:
|
Sample code for testing error injection can be found here:
|
||||||
|
@ -20,7 +20,7 @@ ADM1266 is a sequencer that features voltage readback from 17 channels via an
|
|||||||
integrated 12 bit SAR ADC, accessed using a PMBus interface.
|
integrated 12 bit SAR ADC, accessed using a PMBus interface.
|
||||||
|
|
||||||
The driver is a client driver to the core PMBus driver. Please see
|
The driver is a client driver to the core PMBus driver. Please see
|
||||||
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
Documentation/hwmon/pmbus.rst for details on PMBus client drivers.
|
||||||
|
|
||||||
|
|
||||||
Sysfs entries
|
Sysfs entries
|
||||||
|
@ -132,6 +132,7 @@ Hardware Monitoring Kernel Drivers
|
|||||||
mcp3021
|
mcp3021
|
||||||
menf21bmc
|
menf21bmc
|
||||||
mlxreg-fan
|
mlxreg-fan
|
||||||
|
mp2975
|
||||||
nct6683
|
nct6683
|
||||||
nct6775
|
nct6775
|
||||||
nct7802
|
nct7802
|
||||||
|
@ -20,6 +20,7 @@ This driver implements support for Monolithic Power Systems, Inc. (MPS)
|
|||||||
vendor dual-loop, digital, multi-phase controller MP2975.
|
vendor dual-loop, digital, multi-phase controller MP2975.
|
||||||
|
|
||||||
This device:
|
This device:
|
||||||
|
|
||||||
- Supports up to two power rail.
|
- Supports up to two power rail.
|
||||||
- Provides 8 pulse-width modulations (PWMs), and can be configured up
|
- Provides 8 pulse-width modulations (PWMs), and can be configured up
|
||||||
to 8-phase operation for rail 1 and up to 4-phase operation for rail
|
to 8-phase operation for rail 1 and up to 4-phase operation for rail
|
||||||
@ -32,10 +33,12 @@ This device:
|
|||||||
10-mV DAC, IMVP9 mode with 5-mV DAC.
|
10-mV DAC, IMVP9 mode with 5-mV DAC.
|
||||||
|
|
||||||
Device supports:
|
Device supports:
|
||||||
|
|
||||||
- SVID interface.
|
- SVID interface.
|
||||||
- AVSBus interface.
|
- AVSBus interface.
|
||||||
|
|
||||||
Device complaint with:
|
Device complaint with:
|
||||||
|
|
||||||
- PMBus rev 1.3 interface.
|
- PMBus rev 1.3 interface.
|
||||||
|
|
||||||
Device supports direct format for reading output current, output voltage,
|
Device supports direct format for reading output current, output voltage,
|
||||||
@ -45,11 +48,14 @@ Device supports VID and direct formats for reading output voltage.
|
|||||||
The below VID modes are supported: VR12, VR13, IMVP9.
|
The below VID modes are supported: VR12, VR13, IMVP9.
|
||||||
|
|
||||||
The driver provides the next attributes for the current:
|
The driver provides the next attributes for the current:
|
||||||
|
|
||||||
- for current in: input, maximum alarm;
|
- for current in: input, maximum alarm;
|
||||||
- for current out input, maximum alarm and highest values;
|
- for current out input, maximum alarm and highest values;
|
||||||
- for phase current: input and label.
|
- for phase current: input and label.
|
||||||
attributes.
|
attributes.
|
||||||
|
|
||||||
The driver exports the following attributes via the 'sysfs' files, where
|
The driver exports the following attributes via the 'sysfs' files, where
|
||||||
|
|
||||||
- 'n' is number of telemetry pages (from 1 to 2);
|
- 'n' is number of telemetry pages (from 1 to 2);
|
||||||
- 'k' is number of configured phases (from 1 to 8);
|
- 'k' is number of configured phases (from 1 to 8);
|
||||||
- indexes 1, 1*n for "iin";
|
- indexes 1, 1*n for "iin";
|
||||||
@ -65,11 +71,14 @@ The driver exports the following attributes via the 'sysfs' files, where
|
|||||||
**curr[1-{2n+k}]_label**
|
**curr[1-{2n+k}]_label**
|
||||||
|
|
||||||
The driver provides the next attributes for the voltage:
|
The driver provides the next attributes for the voltage:
|
||||||
|
|
||||||
- for voltage in: input, high critical threshold, high critical alarm, all only
|
- for voltage in: input, high critical threshold, high critical alarm, all only
|
||||||
from page 0;
|
from page 0;
|
||||||
- for voltage out: input, low and high critical thresholds, low and high
|
- for voltage out: input, low and high critical thresholds, low and high
|
||||||
critical alarms, from pages 0 and 1;
|
critical alarms, from pages 0 and 1;
|
||||||
|
|
||||||
The driver exports the following attributes via the 'sysfs' files, where
|
The driver exports the following attributes via the 'sysfs' files, where
|
||||||
|
|
||||||
- 'n' is number of telemetry pages (from 1 to 2);
|
- 'n' is number of telemetry pages (from 1 to 2);
|
||||||
- indexes 1 for "iin";
|
- indexes 1 for "iin";
|
||||||
- indexes n+1, n+2 for "vout";
|
- indexes n+1, n+2 for "vout";
|
||||||
@ -87,9 +96,12 @@ The driver exports the following attributes via the 'sysfs' files, where
|
|||||||
**in[2-{n+1}1_lcrit_alarm**
|
**in[2-{n+1}1_lcrit_alarm**
|
||||||
|
|
||||||
The driver provides the next attributes for the power:
|
The driver provides the next attributes for the power:
|
||||||
|
|
||||||
- for power in alarm and input.
|
- for power in alarm and input.
|
||||||
- for power out: highest and input.
|
- for power out: highest and input.
|
||||||
|
|
||||||
The driver exports the following attributes via the 'sysfs' files, where
|
The driver exports the following attributes via the 'sysfs' files, where
|
||||||
|
|
||||||
- 'n' is number of telemetry pages (from 1 to 2);
|
- 'n' is number of telemetry pages (from 1 to 2);
|
||||||
- indexes 1 for "pin";
|
- indexes 1 for "pin";
|
||||||
- indexes n+1, n+2 for "pout";
|
- indexes n+1, n+2 for "pout";
|
||||||
|
@ -42,6 +42,7 @@ The validator tracks lock-class usage history and divides the usage into
|
|||||||
(4 usages * n STATEs + 1) categories:
|
(4 usages * n STATEs + 1) categories:
|
||||||
|
|
||||||
where the 4 usages can be:
|
where the 4 usages can be:
|
||||||
|
|
||||||
- 'ever held in STATE context'
|
- 'ever held in STATE context'
|
||||||
- 'ever held as readlock in STATE context'
|
- 'ever held as readlock in STATE context'
|
||||||
- 'ever held with STATE enabled'
|
- 'ever held with STATE enabled'
|
||||||
@ -49,10 +50,12 @@ where the 4 usages can be:
|
|||||||
|
|
||||||
where the n STATEs are coded in kernel/locking/lockdep_states.h and as of
|
where the n STATEs are coded in kernel/locking/lockdep_states.h and as of
|
||||||
now they include:
|
now they include:
|
||||||
|
|
||||||
- hardirq
|
- hardirq
|
||||||
- softirq
|
- softirq
|
||||||
|
|
||||||
where the last 1 category is:
|
where the last 1 category is:
|
||||||
|
|
||||||
- 'ever used' [ == !unused ]
|
- 'ever used' [ == !unused ]
|
||||||
|
|
||||||
When locking rules are violated, these usage bits are presented in the
|
When locking rules are violated, these usage bits are presented in the
|
||||||
@ -96,9 +99,9 @@ exact case is for the lock as of the reporting time.
|
|||||||
+--------------+-------------+--------------+
|
+--------------+-------------+--------------+
|
||||||
| | irq enabled | irq disabled |
|
| | irq enabled | irq disabled |
|
||||||
+--------------+-------------+--------------+
|
+--------------+-------------+--------------+
|
||||||
| ever in irq | ? | - |
|
| ever in irq | '?' | '-' |
|
||||||
+--------------+-------------+--------------+
|
+--------------+-------------+--------------+
|
||||||
| never in irq | + | . |
|
| never in irq | '+' | '.' |
|
||||||
+--------------+-------------+--------------+
|
+--------------+-------------+--------------+
|
||||||
|
|
||||||
The character '-' suggests irq is disabled because if otherwise the
|
The character '-' suggests irq is disabled because if otherwise the
|
||||||
@ -216,7 +219,7 @@ looks like this::
|
|||||||
BD_MUTEX_PARTITION
|
BD_MUTEX_PARTITION
|
||||||
};
|
};
|
||||||
|
|
||||||
mutex_lock_nested(&bdev->bd_contains->bd_mutex, BD_MUTEX_PARTITION);
|
mutex_lock_nested(&bdev->bd_contains->bd_mutex, BD_MUTEX_PARTITION);
|
||||||
|
|
||||||
In this case the locking is done on a bdev object that is known to be a
|
In this case the locking is done on a bdev object that is known to be a
|
||||||
partition.
|
partition.
|
||||||
@ -334,7 +337,7 @@ Troubleshooting:
|
|||||||
----------------
|
----------------
|
||||||
|
|
||||||
The validator tracks a maximum of MAX_LOCKDEP_KEYS number of lock classes.
|
The validator tracks a maximum of MAX_LOCKDEP_KEYS number of lock classes.
|
||||||
Exceeding this number will trigger the following lockdep warning:
|
Exceeding this number will trigger the following lockdep warning::
|
||||||
|
|
||||||
(DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS))
|
(DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS))
|
||||||
|
|
||||||
@ -420,7 +423,8 @@ the critical section of another reader of the same lock instance.
|
|||||||
|
|
||||||
The difference between recursive readers and non-recursive readers is because:
|
The difference between recursive readers and non-recursive readers is because:
|
||||||
recursive readers get blocked only by a write lock *holder*, while non-recursive
|
recursive readers get blocked only by a write lock *holder*, while non-recursive
|
||||||
readers could get blocked by a write lock *waiter*. Considering the follow example:
|
readers could get blocked by a write lock *waiter*. Considering the follow
|
||||||
|
example::
|
||||||
|
|
||||||
TASK A: TASK B:
|
TASK A: TASK B:
|
||||||
|
|
||||||
@ -448,20 +452,22 @@ There are simply four block conditions:
|
|||||||
|
|
||||||
Block condition matrix, Y means the row blocks the column, and N means otherwise.
|
Block condition matrix, Y means the row blocks the column, and N means otherwise.
|
||||||
|
|
||||||
| E | r | R |
|
|
||||||
+---+---+---+---+
|
+---+---+---+---+
|
||||||
E | Y | Y | Y |
|
| | E | r | R |
|
||||||
+---+---+---+---+
|
+---+---+---+---+
|
||||||
r | Y | Y | N |
|
| E | Y | Y | Y |
|
||||||
|
+---+---+---+---+
|
||||||
|
| r | Y | Y | N |
|
||||||
|
+---+---+---+---+
|
||||||
|
| R | Y | Y | N |
|
||||||
+---+---+---+---+
|
+---+---+---+---+
|
||||||
R | Y | Y | N |
|
|
||||||
|
|
||||||
(W: writers, r: non-recursive readers, R: recursive readers)
|
(W: writers, r: non-recursive readers, R: recursive readers)
|
||||||
|
|
||||||
|
|
||||||
acquired recursively. Unlike non-recursive read locks, recursive read locks
|
acquired recursively. Unlike non-recursive read locks, recursive read locks
|
||||||
only get blocked by current write lock *holders* other than write lock
|
only get blocked by current write lock *holders* other than write lock
|
||||||
*waiters*, for example:
|
*waiters*, for example::
|
||||||
|
|
||||||
TASK A: TASK B:
|
TASK A: TASK B:
|
||||||
|
|
||||||
@ -491,7 +497,7 @@ Recursive locks don't block each other, while non-recursive locks do (this is
|
|||||||
even true for two non-recursive read locks). A non-recursive lock can block the
|
even true for two non-recursive read locks). A non-recursive lock can block the
|
||||||
corresponding recursive lock, and vice versa.
|
corresponding recursive lock, and vice versa.
|
||||||
|
|
||||||
A deadlock case with recursive locks involved is as follow:
|
A deadlock case with recursive locks involved is as follow::
|
||||||
|
|
||||||
TASK A: TASK B:
|
TASK A: TASK B:
|
||||||
|
|
||||||
@ -510,7 +516,7 @@ because there are 3 types for lockers, there are, in theory, 9 types of lock
|
|||||||
dependencies, but we can show that 4 types of lock dependencies are enough for
|
dependencies, but we can show that 4 types of lock dependencies are enough for
|
||||||
deadlock detection.
|
deadlock detection.
|
||||||
|
|
||||||
For each lock dependency:
|
For each lock dependency::
|
||||||
|
|
||||||
L1 -> L2
|
L1 -> L2
|
||||||
|
|
||||||
@ -525,20 +531,25 @@ same types).
|
|||||||
With the above combination for simplification, there are 4 types of dependency edges
|
With the above combination for simplification, there are 4 types of dependency edges
|
||||||
in the lockdep graph:
|
in the lockdep graph:
|
||||||
|
|
||||||
1) -(ER)->: exclusive writer to recursive reader dependency, "X -(ER)-> Y" means
|
1) -(ER)->:
|
||||||
|
exclusive writer to recursive reader dependency, "X -(ER)-> Y" means
|
||||||
X -> Y and X is a writer and Y is a recursive reader.
|
X -> Y and X is a writer and Y is a recursive reader.
|
||||||
|
|
||||||
2) -(EN)->: exclusive writer to non-recursive locker dependency, "X -(EN)-> Y" means
|
2) -(EN)->:
|
||||||
|
exclusive writer to non-recursive locker dependency, "X -(EN)-> Y" means
|
||||||
X -> Y and X is a writer and Y is either a writer or non-recursive reader.
|
X -> Y and X is a writer and Y is either a writer or non-recursive reader.
|
||||||
|
|
||||||
3) -(SR)->: shared reader to recursive reader dependency, "X -(SR)-> Y" means
|
3) -(SR)->:
|
||||||
|
shared reader to recursive reader dependency, "X -(SR)-> Y" means
|
||||||
X -> Y and X is a reader (recursive or not) and Y is a recursive reader.
|
X -> Y and X is a reader (recursive or not) and Y is a recursive reader.
|
||||||
|
|
||||||
4) -(SN)->: shared reader to non-recursive locker dependency, "X -(SN)-> Y" means
|
4) -(SN)->:
|
||||||
|
shared reader to non-recursive locker dependency, "X -(SN)-> Y" means
|
||||||
X -> Y and X is a reader (recursive or not) and Y is either a writer or
|
X -> Y and X is a reader (recursive or not) and Y is either a writer or
|
||||||
non-recursive reader.
|
non-recursive reader.
|
||||||
|
|
||||||
Note that given two locks, they may have multiple dependencies between them, for example:
|
Note that given two locks, they may have multiple dependencies between them,
|
||||||
|
for example::
|
||||||
|
|
||||||
TASK A:
|
TASK A:
|
||||||
|
|
||||||
@ -592,11 +603,11 @@ circles that won't cause deadlocks.
|
|||||||
|
|
||||||
Proof for sufficiency (Lemma 1):
|
Proof for sufficiency (Lemma 1):
|
||||||
|
|
||||||
Let's say we have a strong circle:
|
Let's say we have a strong circle::
|
||||||
|
|
||||||
L1 -> L2 ... -> Ln -> L1
|
L1 -> L2 ... -> Ln -> L1
|
||||||
|
|
||||||
, which means we have dependencies:
|
, which means we have dependencies::
|
||||||
|
|
||||||
L1 -> L2
|
L1 -> L2
|
||||||
L2 -> L3
|
L2 -> L3
|
||||||
@ -633,7 +644,7 @@ a lock held by P2, and P2 is waiting for a lock held by P3, ... and Pn is waitin
|
|||||||
for a lock held by P1. Let's name the lock Px is waiting as Lx, so since P1 is waiting
|
for a lock held by P1. Let's name the lock Px is waiting as Lx, so since P1 is waiting
|
||||||
for L1 and holding Ln, so we will have Ln -> L1 in the dependency graph. Similarly,
|
for L1 and holding Ln, so we will have Ln -> L1 in the dependency graph. Similarly,
|
||||||
we have L1 -> L2, L2 -> L3, ..., Ln-1 -> Ln in the dependency graph, which means we
|
we have L1 -> L2, L2 -> L3, ..., Ln-1 -> Ln in the dependency graph, which means we
|
||||||
have a circle:
|
have a circle::
|
||||||
|
|
||||||
Ln -> L1 -> L2 -> ... -> Ln
|
Ln -> L1 -> L2 -> ... -> Ln
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ The ``ice`` driver reports the following versions
|
|||||||
that both the name (as reported by ``fw.app.name``) and version are
|
that both the name (as reported by ``fw.app.name``) and version are
|
||||||
required to uniquely identify the package.
|
required to uniquely identify the package.
|
||||||
* - ``fw.app.bundle_id``
|
* - ``fw.app.bundle_id``
|
||||||
|
- running
|
||||||
- 0xc0000001
|
- 0xc0000001
|
||||||
- Unique identifier for the DDP package loaded in the device. Also
|
- Unique identifier for the DDP package loaded in the device. Also
|
||||||
referred to as the DDP Track ID. Can be used to uniquely identify
|
referred to as the DDP Track ID. Can be used to uniquely identify
|
||||||
|
@ -175,5 +175,4 @@ The following structures are internal to the kernel, their members are
|
|||||||
translated to netlink attributes when dumped. Drivers must not overwrite
|
translated to netlink attributes when dumped. Drivers must not overwrite
|
||||||
the statistics they don't report with 0.
|
the statistics they don't report with 0.
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/ethtool.h
|
- ethtool_pause_stats()
|
||||||
:identifiers: ethtool_pause_stats
|
|
||||||
|
@ -22,6 +22,7 @@ place where this information is gathered.
|
|||||||
spec_ctrl
|
spec_ctrl
|
||||||
accelerators/ocxl
|
accelerators/ocxl
|
||||||
ioctl/index
|
ioctl/index
|
||||||
|
iommu
|
||||||
media/index
|
media/index
|
||||||
|
|
||||||
.. only:: subproject and html
|
.. only:: subproject and html
|
||||||
|
@ -978,7 +978,7 @@ M: Michael Hennerich <Michael.Hennerich@analog.com>
|
|||||||
L: linux-iio@vger.kernel.org
|
L: linux-iio@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://ez.analog.com/community/linux-device-drivers
|
W: http://ez.analog.com/community/linux-device-drivers
|
||||||
F: Documentation/devicetree/bindings/iio/adc/adi,ad7768-1.txt
|
F: Documentation/devicetree/bindings/iio/adc/adi,ad7768-1.yaml
|
||||||
F: drivers/iio/adc/ad7768-1.c
|
F: drivers/iio/adc/ad7768-1.c
|
||||||
|
|
||||||
ANALOG DEVICES INC AD7780 DRIVER
|
ANALOG DEVICES INC AD7780 DRIVER
|
||||||
@ -3857,7 +3857,7 @@ M: Roger Quadros <rogerq@ti.com>
|
|||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
|
||||||
F: Documentation/devicetree/bindings/usb/cdns-usb3.txt
|
F: Documentation/devicetree/bindings/usb/cdns,usb3.yaml
|
||||||
F: drivers/usb/cdns3/
|
F: drivers/usb/cdns3/
|
||||||
|
|
||||||
CADET FM/AM RADIO RECEIVER DRIVER
|
CADET FM/AM RADIO RECEIVER DRIVER
|
||||||
@ -7916,7 +7916,7 @@ HISILICON LPC BUS DRIVER
|
|||||||
M: john.garry@huawei.com
|
M: john.garry@huawei.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: http://www.hisilicon.com
|
W: http://www.hisilicon.com
|
||||||
F: Documentation/devicetree/bindings/arm/hisilicon/hisilicon-low-pin-count.txt
|
F: Documentation/devicetree/bindings/arm/hisilicon/low-pin-count.yaml
|
||||||
F: drivers/bus/hisi_lpc.c
|
F: drivers/bus/hisi_lpc.c
|
||||||
|
|
||||||
HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
|
HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
|
||||||
@ -14882,7 +14882,6 @@ RENESAS ETHERNET DRIVERS
|
|||||||
R: Sergei Shtylyov <sergei.shtylyov@gmail.com>
|
R: Sergei Shtylyov <sergei.shtylyov@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
F: Documentation/devicetree/bindings/net/renesas,*.txt
|
|
||||||
F: Documentation/devicetree/bindings/net/renesas,*.yaml
|
F: Documentation/devicetree/bindings/net/renesas,*.yaml
|
||||||
F: drivers/net/ethernet/renesas/
|
F: drivers/net/ethernet/renesas/
|
||||||
F: include/linux/sh_eth.h
|
F: include/linux/sh_eth.h
|
||||||
@ -18083,7 +18082,7 @@ M: Yu Chen <chenyu56@huawei.com>
|
|||||||
M: Binghui Wang <wangbinghui@hisilicon.com>
|
M: Binghui Wang <wangbinghui@hisilicon.com>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/phy/phy-hi3660-usb3.txt
|
F: Documentation/devicetree/bindings/phy/hisilicon,hi3660-usb3.yaml
|
||||||
F: drivers/phy/hisilicon/phy-hi3660-usb3.c
|
F: drivers/phy/hisilicon/phy-hi3660-usb3.c
|
||||||
|
|
||||||
USB ISP116X DRIVER
|
USB ISP116X DRIVER
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* This file add support for MD5 and SHA1/SHA224/SHA256/SHA384/SHA512.
|
* This file add support for MD5 and SHA1/SHA224/SHA256/SHA384/SHA512.
|
||||||
*
|
*
|
||||||
* You could find the datasheet in Documentation/arm/sunxi/README
|
* You could find the datasheet in Documentation/arm/sunxi.rst
|
||||||
*/
|
*/
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* This file handle the PRNG
|
* This file handle the PRNG
|
||||||
*
|
*
|
||||||
* You could find a link for the datasheet in Documentation/arm/sunxi/README
|
* You could find a link for the datasheet in Documentation/arm/sunxi.rst
|
||||||
*/
|
*/
|
||||||
#include "sun8i-ce.h"
|
#include "sun8i-ce.h"
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* This file handle the TRNG
|
* This file handle the TRNG
|
||||||
*
|
*
|
||||||
* You could find a link for the datasheet in Documentation/arm/sunxi/README
|
* You could find a link for the datasheet in Documentation/arm/sunxi.rst
|
||||||
*/
|
*/
|
||||||
#include "sun8i-ce.h"
|
#include "sun8i-ce.h"
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
@ -239,9 +239,11 @@ bool amdgpu_device_supports_baco(struct drm_device *dev)
|
|||||||
return amdgpu_asic_supports_baco(adev);
|
return amdgpu_asic_supports_baco(adev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VRAM access helper functions
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VRAM access helper functions.
|
|
||||||
*
|
|
||||||
* amdgpu_device_vram_access - read/write a buffer in vram
|
* amdgpu_device_vram_access - read/write a buffer in vram
|
||||||
*
|
*
|
||||||
* @adev: amdgpu_device pointer
|
* @adev: amdgpu_device pointer
|
||||||
@ -705,7 +707,7 @@ void amdgpu_device_indirect_wreg64(struct amdgpu_device *adev,
|
|||||||
/**
|
/**
|
||||||
* amdgpu_invalid_rreg - dummy reg read function
|
* amdgpu_invalid_rreg - dummy reg read function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
*
|
*
|
||||||
* Dummy register read function. Used for register blocks
|
* Dummy register read function. Used for register blocks
|
||||||
@ -722,7 +724,7 @@ static uint32_t amdgpu_invalid_rreg(struct amdgpu_device *adev, uint32_t reg)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_invalid_wreg - dummy reg write function
|
* amdgpu_invalid_wreg - dummy reg write function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
* @v: value to write to the register
|
* @v: value to write to the register
|
||||||
*
|
*
|
||||||
@ -739,7 +741,7 @@ static void amdgpu_invalid_wreg(struct amdgpu_device *adev, uint32_t reg, uint32
|
|||||||
/**
|
/**
|
||||||
* amdgpu_invalid_rreg64 - dummy 64 bit reg read function
|
* amdgpu_invalid_rreg64 - dummy 64 bit reg read function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
*
|
*
|
||||||
* Dummy register read function. Used for register blocks
|
* Dummy register read function. Used for register blocks
|
||||||
@ -756,7 +758,7 @@ static uint64_t amdgpu_invalid_rreg64(struct amdgpu_device *adev, uint32_t reg)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_invalid_wreg64 - dummy reg write function
|
* amdgpu_invalid_wreg64 - dummy reg write function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
* @v: value to write to the register
|
* @v: value to write to the register
|
||||||
*
|
*
|
||||||
@ -773,7 +775,7 @@ static void amdgpu_invalid_wreg64(struct amdgpu_device *adev, uint32_t reg, uint
|
|||||||
/**
|
/**
|
||||||
* amdgpu_block_invalid_rreg - dummy reg read function
|
* amdgpu_block_invalid_rreg - dummy reg read function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @block: offset of instance
|
* @block: offset of instance
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
*
|
*
|
||||||
@ -793,7 +795,7 @@ static uint32_t amdgpu_block_invalid_rreg(struct amdgpu_device *adev,
|
|||||||
/**
|
/**
|
||||||
* amdgpu_block_invalid_wreg - dummy reg write function
|
* amdgpu_block_invalid_wreg - dummy reg write function
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @block: offset of instance
|
* @block: offset of instance
|
||||||
* @reg: offset of register
|
* @reg: offset of register
|
||||||
* @v: value to write to the register
|
* @v: value to write to the register
|
||||||
@ -813,7 +815,7 @@ static void amdgpu_block_invalid_wreg(struct amdgpu_device *adev,
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_asic_init - Wrapper for atom asic_init
|
* amdgpu_device_asic_init - Wrapper for atom asic_init
|
||||||
*
|
*
|
||||||
* @dev: drm_device pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Does any asic specific work and then calls atom asic init.
|
* Does any asic specific work and then calls atom asic init.
|
||||||
*/
|
*/
|
||||||
@ -827,7 +829,7 @@ static int amdgpu_device_asic_init(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_vram_scratch_init - allocate the VRAM scratch page
|
* amdgpu_device_vram_scratch_init - allocate the VRAM scratch page
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Allocates a scratch page of VRAM for use by various things in the
|
* Allocates a scratch page of VRAM for use by various things in the
|
||||||
* driver.
|
* driver.
|
||||||
@ -844,7 +846,7 @@ static int amdgpu_device_vram_scratch_init(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_vram_scratch_fini - Free the VRAM scratch page
|
* amdgpu_device_vram_scratch_fini - Free the VRAM scratch page
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Frees the VRAM scratch page.
|
* Frees the VRAM scratch page.
|
||||||
*/
|
*/
|
||||||
@ -3011,7 +3013,7 @@ bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_has_dc_support - check if dc is supported
|
* amdgpu_device_has_dc_support - check if dc is supported
|
||||||
*
|
*
|
||||||
* @adev: amdgpu_device_pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Returns true for supported, false for not supported
|
* Returns true for supported, false for not supported
|
||||||
*/
|
*/
|
||||||
@ -4045,7 +4047,7 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
|
* amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @from_hypervisor: request from hypervisor
|
* @from_hypervisor: request from hypervisor
|
||||||
*
|
*
|
||||||
* do VF FLR and reinitialize Asic
|
* do VF FLR and reinitialize Asic
|
||||||
@ -4100,7 +4102,7 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_has_job_running - check if there is any job in mirror list
|
* amdgpu_device_has_job_running - check if there is any job in mirror list
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* check if there is any job in mirror list
|
* check if there is any job in mirror list
|
||||||
*/
|
*/
|
||||||
@ -4128,7 +4130,7 @@ bool amdgpu_device_has_job_running(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_should_recover_gpu - check if we should try GPU recovery
|
* amdgpu_device_should_recover_gpu - check if we should try GPU recovery
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
|
* Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
|
||||||
* a hung GPU.
|
* a hung GPU.
|
||||||
@ -4477,7 +4479,7 @@ static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_device_gpu_recover - reset the asic and recover scheduler
|
* amdgpu_device_gpu_recover - reset the asic and recover scheduler
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device pointer
|
* @adev: amdgpu_device pointer
|
||||||
* @job: which job trigger hang
|
* @job: which job trigger hang
|
||||||
*
|
*
|
||||||
* Attempt to reset the GPU if it has hung (all asics).
|
* Attempt to reset the GPU if it has hung (all asics).
|
||||||
@ -4497,7 +4499,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
bool need_emergency_restart = false;
|
bool need_emergency_restart = false;
|
||||||
bool audio_suspended = false;
|
bool audio_suspended = false;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Special case: RAS triggered and full reset isn't supported
|
* Special case: RAS triggered and full reset isn't supported
|
||||||
*/
|
*/
|
||||||
need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
|
need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
|
||||||
|
@ -81,8 +81,8 @@ static const struct ttm_resource_manager_func amdgpu_gtt_mgr_func;
|
|||||||
/**
|
/**
|
||||||
* amdgpu_gtt_mgr_init - init GTT manager and DRM MM
|
* amdgpu_gtt_mgr_init - init GTT manager and DRM MM
|
||||||
*
|
*
|
||||||
* @man: TTM memory type manager
|
* @adev: amdgpu_device pointer
|
||||||
* @p_size: maximum size of GTT
|
* @gtt_size: maximum size of GTT
|
||||||
*
|
*
|
||||||
* Allocate and initialize the GTT manager.
|
* Allocate and initialize the GTT manager.
|
||||||
*/
|
*/
|
||||||
@ -123,7 +123,7 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_gtt_mgr_fini - free and destroy GTT manager
|
* amdgpu_gtt_mgr_fini - free and destroy GTT manager
|
||||||
*
|
*
|
||||||
* @man: TTM memory type manager
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Destroy and free the GTT manager, returns -EBUSY if ranges are still
|
* Destroy and free the GTT manager, returns -EBUSY if ranges are still
|
||||||
* allocated inside it.
|
* allocated inside it.
|
||||||
|
@ -168,8 +168,7 @@ static const struct ttm_resource_manager_func amdgpu_vram_mgr_func;
|
|||||||
/**
|
/**
|
||||||
* amdgpu_vram_mgr_init - init VRAM manager and DRM MM
|
* amdgpu_vram_mgr_init - init VRAM manager and DRM MM
|
||||||
*
|
*
|
||||||
* @man: TTM memory type manager
|
* @adev: amdgpu_device pointer
|
||||||
* @p_size: maximum size of VRAM
|
|
||||||
*
|
*
|
||||||
* Allocate and initialize the VRAM manager.
|
* Allocate and initialize the VRAM manager.
|
||||||
*/
|
*/
|
||||||
@ -199,7 +198,7 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_vram_mgr_fini - free and destroy VRAM manager
|
* amdgpu_vram_mgr_fini - free and destroy VRAM manager
|
||||||
*
|
*
|
||||||
* @man: TTM memory type manager
|
* @adev: amdgpu_device pointer
|
||||||
*
|
*
|
||||||
* Destroy and free the VRAM manager, returns -EBUSY if ranges are still
|
* Destroy and free the VRAM manager, returns -EBUSY if ranges are still
|
||||||
* allocated inside it.
|
* allocated inside it.
|
||||||
@ -229,7 +228,7 @@ void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
|
|||||||
/**
|
/**
|
||||||
* amdgpu_vram_mgr_vis_size - Calculate visible node size
|
* amdgpu_vram_mgr_vis_size - Calculate visible node size
|
||||||
*
|
*
|
||||||
* @adev: amdgpu device structure
|
* @adev: amdgpu_device pointer
|
||||||
* @node: MM node structure
|
* @node: MM node structure
|
||||||
*
|
*
|
||||||
* Calculate how many bytes of the MM node are inside visible VRAM
|
* Calculate how many bytes of the MM node are inside visible VRAM
|
||||||
|
@ -583,7 +583,7 @@ static void amdgpu_dm_fbc_init(struct drm_connector *connector)
|
|||||||
{
|
{
|
||||||
struct drm_device *dev = connector->dev;
|
struct drm_device *dev = connector->dev;
|
||||||
struct amdgpu_device *adev = drm_to_adev(dev);
|
struct amdgpu_device *adev = drm_to_adev(dev);
|
||||||
struct dm_comressor_info *compressor = &adev->dm.compressor;
|
struct dm_compressor_info *compressor = &adev->dm.compressor;
|
||||||
struct amdgpu_dm_connector *aconn = to_amdgpu_dm_connector(connector);
|
struct amdgpu_dm_connector *aconn = to_amdgpu_dm_connector(connector);
|
||||||
struct drm_display_mode *mode;
|
struct drm_display_mode *mode;
|
||||||
unsigned long max_size = 0;
|
unsigned long max_size = 0;
|
||||||
|
@ -86,7 +86,7 @@ struct irq_list_head {
|
|||||||
* @bo_ptr: Pointer to the buffer object
|
* @bo_ptr: Pointer to the buffer object
|
||||||
* @gpu_addr: MMIO gpu addr
|
* @gpu_addr: MMIO gpu addr
|
||||||
*/
|
*/
|
||||||
struct dm_comressor_info {
|
struct dm_compressor_info {
|
||||||
void *cpu_addr;
|
void *cpu_addr;
|
||||||
struct amdgpu_bo *bo_ptr;
|
struct amdgpu_bo *bo_ptr;
|
||||||
uint64_t gpu_addr;
|
uint64_t gpu_addr;
|
||||||
@ -148,7 +148,7 @@ struct amdgpu_dm_backlight_caps {
|
|||||||
* @soc_bounding_box: SOC bounding box values provided by gpu_info FW
|
* @soc_bounding_box: SOC bounding box values provided by gpu_info FW
|
||||||
* @cached_state: Caches device atomic state for suspend/resume
|
* @cached_state: Caches device atomic state for suspend/resume
|
||||||
* @cached_dc_state: Cached state of content streams
|
* @cached_dc_state: Cached state of content streams
|
||||||
* @compressor: Frame buffer compression buffer. See &struct dm_comressor_info
|
* @compressor: Frame buffer compression buffer. See &struct dm_compressor_info
|
||||||
* @force_timing_sync: set via debugfs. When set, indicates that all connected
|
* @force_timing_sync: set via debugfs. When set, indicates that all connected
|
||||||
* displays will be forced to synchronize.
|
* displays will be forced to synchronize.
|
||||||
*/
|
*/
|
||||||
@ -324,7 +324,7 @@ struct amdgpu_display_manager {
|
|||||||
struct drm_atomic_state *cached_state;
|
struct drm_atomic_state *cached_state;
|
||||||
struct dc_state *cached_dc_state;
|
struct dc_state *cached_dc_state;
|
||||||
|
|
||||||
struct dm_comressor_info compressor;
|
struct dm_compressor_info compressor;
|
||||||
|
|
||||||
const struct firmware *fw_dmcu;
|
const struct firmware *fw_dmcu;
|
||||||
uint32_t dmcu_fw_version;
|
uint32_t dmcu_fw_version;
|
||||||
|
@ -256,6 +256,7 @@ enum rdma_ch_state {
|
|||||||
* @rdma_cm: See below.
|
* @rdma_cm: See below.
|
||||||
* @rdma_cm.cm_id: RDMA CM ID associated with the channel.
|
* @rdma_cm.cm_id: RDMA CM ID associated with the channel.
|
||||||
* @cq: IB completion queue for this channel.
|
* @cq: IB completion queue for this channel.
|
||||||
|
* @cq_size: Number of CQEs in @cq.
|
||||||
* @zw_cqe: Zero-length write CQE.
|
* @zw_cqe: Zero-length write CQE.
|
||||||
* @rcu: RCU head.
|
* @rcu: RCU head.
|
||||||
* @kref: kref for this channel.
|
* @kref: kref for this channel.
|
||||||
|
@ -24,7 +24,7 @@ description:
|
|||||||
In addition, it is recommended to declare a mmc-pwrseq on SDIO host above
|
In addition, it is recommended to declare a mmc-pwrseq on SDIO host above
|
||||||
WFx. Without it, you may encounter issues with warm boot. The mmc-pwrseq
|
WFx. Without it, you may encounter issues with warm boot. The mmc-pwrseq
|
||||||
should be compatible with mmc-pwrseq-simple. Please consult
|
should be compatible with mmc-pwrseq-simple. Please consult
|
||||||
Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt for more
|
Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.yaml for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
For SPI':'
|
For SPI':'
|
||||||
|
@ -235,6 +235,8 @@ enum hctx_type {
|
|||||||
* @flags: Zero or more BLK_MQ_F_* flags.
|
* @flags: Zero or more BLK_MQ_F_* flags.
|
||||||
* @driver_data: Pointer to data owned by the block driver that created this
|
* @driver_data: Pointer to data owned by the block driver that created this
|
||||||
* tag set.
|
* tag set.
|
||||||
|
* @active_queues_shared_sbitmap:
|
||||||
|
* number of active request queues per tag set.
|
||||||
* @__bitmap_tags: A shared tags sbitmap, used over all hctx's
|
* @__bitmap_tags: A shared tags sbitmap, used over all hctx's
|
||||||
* @__breserved_tags:
|
* @__breserved_tags:
|
||||||
* A shared reserved tags sbitmap, used over all hctx's
|
* A shared reserved tags sbitmap, used over all hctx's
|
||||||
|
@ -344,9 +344,9 @@ static inline struct page *find_get_page_flags(struct address_space *mapping,
|
|||||||
/**
|
/**
|
||||||
* find_lock_page - locate, pin and lock a pagecache page
|
* find_lock_page - locate, pin and lock a pagecache page
|
||||||
* @mapping: the address_space to search
|
* @mapping: the address_space to search
|
||||||
* @offset: the page index
|
* @index: the page index
|
||||||
*
|
*
|
||||||
* Looks up the page cache entry at @mapping & @offset. If there is a
|
* Looks up the page cache entry at @mapping & @index. If there is a
|
||||||
* page cache page, it is returned locked and with an increased
|
* page cache page, it is returned locked and with an increased
|
||||||
* refcount.
|
* refcount.
|
||||||
*
|
*
|
||||||
@ -363,9 +363,9 @@ static inline struct page *find_lock_page(struct address_space *mapping,
|
|||||||
/**
|
/**
|
||||||
* find_lock_head - Locate, pin and lock a pagecache page.
|
* find_lock_head - Locate, pin and lock a pagecache page.
|
||||||
* @mapping: The address_space to search.
|
* @mapping: The address_space to search.
|
||||||
* @offset: The page index.
|
* @index: The page index.
|
||||||
*
|
*
|
||||||
* Looks up the page cache entry at @mapping & @offset. If there is a
|
* Looks up the page cache entry at @mapping & @index. If there is a
|
||||||
* page cache page, its head page is returned locked and with an increased
|
* page cache page, its head page is returned locked and with an increased
|
||||||
* refcount.
|
* refcount.
|
||||||
*
|
*
|
||||||
|
@ -147,16 +147,8 @@ typedef enum {
|
|||||||
PHY_INTERFACE_MODE_MAX,
|
PHY_INTERFACE_MODE_MAX,
|
||||||
} phy_interface_t;
|
} phy_interface_t;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* phy_supported_speeds - return all speeds currently supported by a PHY device
|
* phy_supported_speeds - return all speeds currently supported by a PHY device
|
||||||
* @phy: The PHY device to return supported speeds of.
|
|
||||||
* @speeds: buffer to store supported speeds in.
|
|
||||||
* @size: size of speeds buffer.
|
|
||||||
*
|
|
||||||
* Description: Returns the number of supported speeds, and fills
|
|
||||||
* the speeds buffer with the supported speeds. If speeds buffer is
|
|
||||||
* too small to contain all currently supported speeds, will return as
|
|
||||||
* many speeds as can fit.
|
|
||||||
*/
|
*/
|
||||||
unsigned int phy_supported_speeds(struct phy_device *phy,
|
unsigned int phy_supported_speeds(struct phy_device *phy,
|
||||||
unsigned int *speeds,
|
unsigned int *speeds,
|
||||||
@ -1022,14 +1014,9 @@ static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
|
|||||||
regnum, mask, set);
|
regnum, mask, set);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* phy_read_mmd - Convenience function for reading a register
|
* phy_read_mmd - Convenience function for reading a register
|
||||||
* from an MMD on a given PHY.
|
* from an MMD on a given PHY.
|
||||||
* @phydev: The phy_device struct
|
|
||||||
* @devad: The MMD to read from
|
|
||||||
* @regnum: The register on the MMD to read
|
|
||||||
*
|
|
||||||
* Same rules as for phy_read();
|
|
||||||
*/
|
*/
|
||||||
int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
||||||
|
|
||||||
@ -1064,38 +1051,21 @@ int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
|||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* __phy_read_mmd - Convenience function for reading a register
|
* __phy_read_mmd - Convenience function for reading a register
|
||||||
* from an MMD on a given PHY.
|
* from an MMD on a given PHY.
|
||||||
* @phydev: The phy_device struct
|
|
||||||
* @devad: The MMD to read from
|
|
||||||
* @regnum: The register on the MMD to read
|
|
||||||
*
|
|
||||||
* Same rules as for __phy_read();
|
|
||||||
*/
|
*/
|
||||||
int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* phy_write_mmd - Convenience function for writing a register
|
* phy_write_mmd - Convenience function for writing a register
|
||||||
* on an MMD on a given PHY.
|
* on an MMD on a given PHY.
|
||||||
* @phydev: The phy_device struct
|
|
||||||
* @devad: The MMD to write to
|
|
||||||
* @regnum: The register on the MMD to read
|
|
||||||
* @val: value to write to @regnum
|
|
||||||
*
|
|
||||||
* Same rules as for phy_write();
|
|
||||||
*/
|
*/
|
||||||
int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
|
int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* __phy_write_mmd - Convenience function for writing a register
|
* __phy_write_mmd - Convenience function for writing a register
|
||||||
* on an MMD on a given PHY.
|
* on an MMD on a given PHY.
|
||||||
* @phydev: The phy_device struct
|
|
||||||
* @devad: The MMD to write to
|
|
||||||
* @regnum: The register on the MMD to read
|
|
||||||
* @val: value to write to @regnum
|
|
||||||
*
|
|
||||||
* Same rules as for __phy_write();
|
|
||||||
*/
|
*/
|
||||||
int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
|
int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
|
||||||
|
|
||||||
|
@ -147,24 +147,6 @@ static inline unsigned int refcount_read(const refcount_t *r)
|
|||||||
return atomic_read(&r->refs);
|
return atomic_read(&r->refs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* refcount_add_not_zero - add a value to a refcount unless it is 0
|
|
||||||
* @i: the value to add to the refcount
|
|
||||||
* @r: the refcount
|
|
||||||
*
|
|
||||||
* Will saturate at REFCOUNT_SATURATED and WARN.
|
|
||||||
*
|
|
||||||
* Provides no memory ordering, it is assumed the caller has guaranteed the
|
|
||||||
* object memory to be stable (RCU, etc.). It does provide a control dependency
|
|
||||||
* and thereby orders future stores. See the comment on top.
|
|
||||||
*
|
|
||||||
* Use of this function is not recommended for the normal reference counting
|
|
||||||
* use case in which references are taken and released one at a time. In these
|
|
||||||
* cases, refcount_inc(), or one of its variants, should instead be used to
|
|
||||||
* increment a reference count.
|
|
||||||
*
|
|
||||||
* Return: false if the passed refcount is 0, true otherwise
|
|
||||||
*/
|
|
||||||
static inline __must_check bool __refcount_add_not_zero(int i, refcount_t *r, int *oldp)
|
static inline __must_check bool __refcount_add_not_zero(int i, refcount_t *r, int *oldp)
|
||||||
{
|
{
|
||||||
int old = refcount_read(r);
|
int old = refcount_read(r);
|
||||||
@ -183,11 +165,42 @@ static inline __must_check bool __refcount_add_not_zero(int i, refcount_t *r, in
|
|||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* refcount_add_not_zero - add a value to a refcount unless it is 0
|
||||||
|
* @i: the value to add to the refcount
|
||||||
|
* @r: the refcount
|
||||||
|
*
|
||||||
|
* Will saturate at REFCOUNT_SATURATED and WARN.
|
||||||
|
*
|
||||||
|
* Provides no memory ordering, it is assumed the caller has guaranteed the
|
||||||
|
* object memory to be stable (RCU, etc.). It does provide a control dependency
|
||||||
|
* and thereby orders future stores. See the comment on top.
|
||||||
|
*
|
||||||
|
* Use of this function is not recommended for the normal reference counting
|
||||||
|
* use case in which references are taken and released one at a time. In these
|
||||||
|
* cases, refcount_inc(), or one of its variants, should instead be used to
|
||||||
|
* increment a reference count.
|
||||||
|
*
|
||||||
|
* Return: false if the passed refcount is 0, true otherwise
|
||||||
|
*/
|
||||||
static inline __must_check bool refcount_add_not_zero(int i, refcount_t *r)
|
static inline __must_check bool refcount_add_not_zero(int i, refcount_t *r)
|
||||||
{
|
{
|
||||||
return __refcount_add_not_zero(i, r, NULL);
|
return __refcount_add_not_zero(i, r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __refcount_add(int i, refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
int old = atomic_fetch_add_relaxed(i, &r->refs);
|
||||||
|
|
||||||
|
if (oldp)
|
||||||
|
*oldp = old;
|
||||||
|
|
||||||
|
if (unlikely(!old))
|
||||||
|
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
|
||||||
|
else if (unlikely(old < 0 || old + i < 0))
|
||||||
|
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_add - add a value to a refcount
|
* refcount_add - add a value to a refcount
|
||||||
* @i: the value to add to the refcount
|
* @i: the value to add to the refcount
|
||||||
@ -204,24 +217,16 @@ static inline __must_check bool refcount_add_not_zero(int i, refcount_t *r)
|
|||||||
* cases, refcount_inc(), or one of its variants, should instead be used to
|
* cases, refcount_inc(), or one of its variants, should instead be used to
|
||||||
* increment a reference count.
|
* increment a reference count.
|
||||||
*/
|
*/
|
||||||
static inline void __refcount_add(int i, refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
int old = atomic_fetch_add_relaxed(i, &r->refs);
|
|
||||||
|
|
||||||
if (oldp)
|
|
||||||
*oldp = old;
|
|
||||||
|
|
||||||
if (unlikely(!old))
|
|
||||||
refcount_warn_saturate(r, REFCOUNT_ADD_UAF);
|
|
||||||
else if (unlikely(old < 0 || old + i < 0))
|
|
||||||
refcount_warn_saturate(r, REFCOUNT_ADD_OVF);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void refcount_add(int i, refcount_t *r)
|
static inline void refcount_add(int i, refcount_t *r)
|
||||||
{
|
{
|
||||||
__refcount_add(i, r, NULL);
|
__refcount_add(i, r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __must_check bool __refcount_inc_not_zero(refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
return __refcount_add_not_zero(1, r, oldp);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_inc_not_zero - increment a refcount unless it is 0
|
* refcount_inc_not_zero - increment a refcount unless it is 0
|
||||||
* @r: the refcount to increment
|
* @r: the refcount to increment
|
||||||
@ -235,16 +240,16 @@ static inline void refcount_add(int i, refcount_t *r)
|
|||||||
*
|
*
|
||||||
* Return: true if the increment was successful, false otherwise
|
* Return: true if the increment was successful, false otherwise
|
||||||
*/
|
*/
|
||||||
static inline __must_check bool __refcount_inc_not_zero(refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
return __refcount_add_not_zero(1, r, oldp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline __must_check bool refcount_inc_not_zero(refcount_t *r)
|
static inline __must_check bool refcount_inc_not_zero(refcount_t *r)
|
||||||
{
|
{
|
||||||
return __refcount_inc_not_zero(r, NULL);
|
return __refcount_inc_not_zero(r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __refcount_inc(refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
__refcount_add(1, r, oldp);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_inc - increment a refcount
|
* refcount_inc - increment a refcount
|
||||||
* @r: the refcount to increment
|
* @r: the refcount to increment
|
||||||
@ -257,16 +262,29 @@ static inline __must_check bool refcount_inc_not_zero(refcount_t *r)
|
|||||||
* Will WARN if the refcount is 0, as this represents a possible use-after-free
|
* Will WARN if the refcount is 0, as this represents a possible use-after-free
|
||||||
* condition.
|
* condition.
|
||||||
*/
|
*/
|
||||||
static inline void __refcount_inc(refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
__refcount_add(1, r, oldp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void refcount_inc(refcount_t *r)
|
static inline void refcount_inc(refcount_t *r)
|
||||||
{
|
{
|
||||||
__refcount_inc(r, NULL);
|
__refcount_inc(r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __must_check bool __refcount_sub_and_test(int i, refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
int old = atomic_fetch_sub_release(i, &r->refs);
|
||||||
|
|
||||||
|
if (oldp)
|
||||||
|
*oldp = old;
|
||||||
|
|
||||||
|
if (old == i) {
|
||||||
|
smp_acquire__after_ctrl_dep();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(old < 0 || old - i < 0))
|
||||||
|
refcount_warn_saturate(r, REFCOUNT_SUB_UAF);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_sub_and_test - subtract from a refcount and test if it is 0
|
* refcount_sub_and_test - subtract from a refcount and test if it is 0
|
||||||
* @i: amount to subtract from the refcount
|
* @i: amount to subtract from the refcount
|
||||||
@ -287,29 +305,16 @@ static inline void refcount_inc(refcount_t *r)
|
|||||||
*
|
*
|
||||||
* Return: true if the resulting refcount is 0, false otherwise
|
* Return: true if the resulting refcount is 0, false otherwise
|
||||||
*/
|
*/
|
||||||
static inline __must_check bool __refcount_sub_and_test(int i, refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
int old = atomic_fetch_sub_release(i, &r->refs);
|
|
||||||
|
|
||||||
if (oldp)
|
|
||||||
*oldp = old;
|
|
||||||
|
|
||||||
if (old == i) {
|
|
||||||
smp_acquire__after_ctrl_dep();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely(old < 0 || old - i < 0))
|
|
||||||
refcount_warn_saturate(r, REFCOUNT_SUB_UAF);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline __must_check bool refcount_sub_and_test(int i, refcount_t *r)
|
static inline __must_check bool refcount_sub_and_test(int i, refcount_t *r)
|
||||||
{
|
{
|
||||||
return __refcount_sub_and_test(i, r, NULL);
|
return __refcount_sub_and_test(i, r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __must_check bool __refcount_dec_and_test(refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
return __refcount_sub_and_test(1, r, oldp);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_dec_and_test - decrement a refcount and test if it is 0
|
* refcount_dec_and_test - decrement a refcount and test if it is 0
|
||||||
* @r: the refcount
|
* @r: the refcount
|
||||||
@ -323,16 +328,22 @@ static inline __must_check bool refcount_sub_and_test(int i, refcount_t *r)
|
|||||||
*
|
*
|
||||||
* Return: true if the resulting refcount is 0, false otherwise
|
* Return: true if the resulting refcount is 0, false otherwise
|
||||||
*/
|
*/
|
||||||
static inline __must_check bool __refcount_dec_and_test(refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
return __refcount_sub_and_test(1, r, oldp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline __must_check bool refcount_dec_and_test(refcount_t *r)
|
static inline __must_check bool refcount_dec_and_test(refcount_t *r)
|
||||||
{
|
{
|
||||||
return __refcount_dec_and_test(r, NULL);
|
return __refcount_dec_and_test(r, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __refcount_dec(refcount_t *r, int *oldp)
|
||||||
|
{
|
||||||
|
int old = atomic_fetch_sub_release(1, &r->refs);
|
||||||
|
|
||||||
|
if (oldp)
|
||||||
|
*oldp = old;
|
||||||
|
|
||||||
|
if (unlikely(old <= 1))
|
||||||
|
refcount_warn_saturate(r, REFCOUNT_DEC_LEAK);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refcount_dec - decrement a refcount
|
* refcount_dec - decrement a refcount
|
||||||
* @r: the refcount
|
* @r: the refcount
|
||||||
@ -343,17 +354,6 @@ static inline __must_check bool refcount_dec_and_test(refcount_t *r)
|
|||||||
* Provides release memory ordering, such that prior loads and stores are done
|
* Provides release memory ordering, such that prior loads and stores are done
|
||||||
* before.
|
* before.
|
||||||
*/
|
*/
|
||||||
static inline void __refcount_dec(refcount_t *r, int *oldp)
|
|
||||||
{
|
|
||||||
int old = atomic_fetch_sub_release(1, &r->refs);
|
|
||||||
|
|
||||||
if (oldp)
|
|
||||||
*oldp = old;
|
|
||||||
|
|
||||||
if (unlikely(old <= 1))
|
|
||||||
refcount_warn_saturate(r, REFCOUNT_DEC_LEAK);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void refcount_dec(refcount_t *r)
|
static inline void refcount_dec(refcount_t *r)
|
||||||
{
|
{
|
||||||
__refcount_dec(r, NULL);
|
__refcount_dec(r, NULL);
|
||||||
|
@ -1092,7 +1092,11 @@ sub output_struct_rst(%) {
|
|||||||
print "\n\n.. c:type:: " . $name . "\n\n";
|
print "\n\n.. c:type:: " . $name . "\n\n";
|
||||||
} else {
|
} else {
|
||||||
my $name = $args{'struct'};
|
my $name = $args{'struct'};
|
||||||
print "\n\n.. c:struct:: " . $name . "\n\n";
|
if ($args{'type'} eq 'union') {
|
||||||
|
print "\n\n.. c:union:: " . $name . "\n\n";
|
||||||
|
} else {
|
||||||
|
print "\n\n.. c:struct:: " . $name . "\n\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
print_lineno($declaration_start_line);
|
print_lineno($declaration_start_line);
|
||||||
$lineprefix = " ";
|
$lineprefix = " ";
|
||||||
|
@ -432,7 +432,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_EQ(expected, seen)
|
* ASSERT_EQ()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -443,7 +443,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, ==, 1)
|
__EXPECT(expected, #expected, seen, #seen, ==, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_NE(expected, seen)
|
* ASSERT_NE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -454,7 +454,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, !=, 1)
|
__EXPECT(expected, #expected, seen, #seen, !=, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_LT(expected, seen)
|
* ASSERT_LT()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -465,7 +465,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, <, 1)
|
__EXPECT(expected, #expected, seen, #seen, <, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_LE(expected, seen)
|
* ASSERT_LE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -476,7 +476,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, <=, 1)
|
__EXPECT(expected, #expected, seen, #seen, <=, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_GT(expected, seen)
|
* ASSERT_GT()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -487,7 +487,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, >, 1)
|
__EXPECT(expected, #expected, seen, #seen, >, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_GE(expected, seen)
|
* ASSERT_GE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -498,7 +498,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, >=, 1)
|
__EXPECT(expected, #expected, seen, #seen, >=, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_NULL(seen)
|
* ASSERT_NULL()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -508,7 +508,7 @@
|
|||||||
__EXPECT(NULL, "NULL", seen, #seen, ==, 1)
|
__EXPECT(NULL, "NULL", seen, #seen, ==, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_TRUE(seen)
|
* ASSERT_TRUE()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -518,7 +518,7 @@
|
|||||||
__EXPECT(0, "0", seen, #seen, !=, 1)
|
__EXPECT(0, "0", seen, #seen, !=, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_FALSE(seen)
|
* ASSERT_FALSE()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -528,7 +528,7 @@
|
|||||||
__EXPECT(0, "0", seen, #seen, ==, 1)
|
__EXPECT(0, "0", seen, #seen, ==, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_STREQ(expected, seen)
|
* ASSERT_STREQ()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -539,7 +539,7 @@
|
|||||||
__EXPECT_STR(expected, seen, ==, 1)
|
__EXPECT_STR(expected, seen, ==, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ASSERT_STRNE(expected, seen)
|
* ASSERT_STRNE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -550,7 +550,7 @@
|
|||||||
__EXPECT_STR(expected, seen, !=, 1)
|
__EXPECT_STR(expected, seen, !=, 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_EQ(expected, seen)
|
* EXPECT_EQ()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -561,7 +561,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, ==, 0)
|
__EXPECT(expected, #expected, seen, #seen, ==, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_NE(expected, seen)
|
* EXPECT_NE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -572,7 +572,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, !=, 0)
|
__EXPECT(expected, #expected, seen, #seen, !=, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_LT(expected, seen)
|
* EXPECT_LT()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -583,7 +583,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, <, 0)
|
__EXPECT(expected, #expected, seen, #seen, <, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_LE(expected, seen)
|
* EXPECT_LE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -594,7 +594,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, <=, 0)
|
__EXPECT(expected, #expected, seen, #seen, <=, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_GT(expected, seen)
|
* EXPECT_GT()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -605,7 +605,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, >, 0)
|
__EXPECT(expected, #expected, seen, #seen, >, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_GE(expected, seen)
|
* EXPECT_GE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -616,7 +616,7 @@
|
|||||||
__EXPECT(expected, #expected, seen, #seen, >=, 0)
|
__EXPECT(expected, #expected, seen, #seen, >=, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_NULL(seen)
|
* EXPECT_NULL()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -626,7 +626,7 @@
|
|||||||
__EXPECT(NULL, "NULL", seen, #seen, ==, 0)
|
__EXPECT(NULL, "NULL", seen, #seen, ==, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_TRUE(seen)
|
* EXPECT_TRUE()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -636,7 +636,7 @@
|
|||||||
__EXPECT(0, "0", seen, #seen, !=, 0)
|
__EXPECT(0, "0", seen, #seen, !=, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_FALSE(seen)
|
* EXPECT_FALSE()
|
||||||
*
|
*
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
*
|
*
|
||||||
@ -646,7 +646,7 @@
|
|||||||
__EXPECT(0, "0", seen, #seen, ==, 0)
|
__EXPECT(0, "0", seen, #seen, ==, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_STREQ(expected, seen)
|
* EXPECT_STREQ()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
@ -657,7 +657,7 @@
|
|||||||
__EXPECT_STR(expected, seen, ==, 0)
|
__EXPECT_STR(expected, seen, ==, 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPECT_STRNE(expected, seen)
|
* EXPECT_STRNE()
|
||||||
*
|
*
|
||||||
* @expected: expected value
|
* @expected: expected value
|
||||||
* @seen: measured value
|
* @seen: measured value
|
||||||
|
Loading…
Reference in New Issue
Block a user