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:
Коммит
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.
|
||||
|
||||
Note on GID policies and setgroups()
|
||||
==================
|
||||
====================================
|
||||
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
|
||||
related code conventions in userspace, we currently allow arbitrary
|
||||
|
|
|
@ -300,6 +300,7 @@ Note:
|
|||
0: 0 1 2 3 4 5 6 7
|
||||
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
|
||||
|
||||
netdev_tstamp_prequeue
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ if major >= 3:
|
|||
support for Sphinx v3.0 and above is brand new. Be prepared for
|
||||
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
|
||||
# checking. Due to that, having macros at c:function cause problems.
|
||||
# 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::
|
||||
|
||||
ok 28 - kmalloc_double_kzfree
|
||||
|
||||
or, if kmalloc failed::
|
||||
|
||||
# kmalloc_large_oob_right: ASSERTION FAILED at lib/test_kasan.c:163
|
||||
Expected ptr is not null, but is
|
||||
not ok 4 - kmalloc_large_oob_right
|
||||
|
||||
or, if a KASAN report was expected, but not found::
|
||||
|
||||
# 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
|
||||
for these system controllers:
|
||||
|
||||
Documentation/devicetree/bindings/arm/hisilicon/hisilicon.txt
|
||||
Documentation/devicetree/bindings/arm/hisilicon/hisilicon.yaml
|
||||
|
||||
Required Properties:
|
||||
|
||||
|
|
|
@ -86,9 +86,6 @@ Other Functions
|
|||
.. kernel-doc:: fs/dax.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: fs/direct-io.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: fs/libfs.c
|
||||
:export:
|
||||
|
||||
|
|
|
@ -83,10 +83,6 @@ AMDGPU XGMI Support
|
|||
===================
|
||||
|
||||
.. 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
|
||||
==================
|
||||
|
@ -124,9 +120,6 @@ RAS VRAM Bad Pages sysfs Interface
|
|||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
||||
:doc: AMDGPU RAS sysfs gpu_vram_bad_pages Interface
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
||||
:internal:
|
||||
|
||||
Sample Code
|
||||
-----------
|
||||
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.
|
||||
|
||||
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
|
||||
|
|
|
@ -132,6 +132,7 @@ Hardware Monitoring Kernel Drivers
|
|||
mcp3021
|
||||
menf21bmc
|
||||
mlxreg-fan
|
||||
mp2975
|
||||
nct6683
|
||||
nct6775
|
||||
nct7802
|
||||
|
|
|
@ -20,6 +20,7 @@ This driver implements support for Monolithic Power Systems, Inc. (MPS)
|
|||
vendor dual-loop, digital, multi-phase controller MP2975.
|
||||
|
||||
This device:
|
||||
|
||||
- Supports up to two power rail.
|
||||
- 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
|
||||
|
@ -32,10 +33,12 @@ This device:
|
|||
10-mV DAC, IMVP9 mode with 5-mV DAC.
|
||||
|
||||
Device supports:
|
||||
|
||||
- SVID interface.
|
||||
- AVSBus interface.
|
||||
|
||||
Device complaint with:
|
||||
|
||||
- PMBus rev 1.3 interface.
|
||||
|
||||
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 driver provides the next attributes for the current:
|
||||
|
||||
- for current in: input, maximum alarm;
|
||||
- for current out input, maximum alarm and highest values;
|
||||
- for phase current: input and label.
|
||||
attributes.
|
||||
attributes.
|
||||
|
||||
The driver exports the following attributes via the 'sysfs' files, where
|
||||
|
||||
- 'n' is number of telemetry pages (from 1 to 2);
|
||||
- 'k' is number of configured phases (from 1 to 8);
|
||||
- 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**
|
||||
|
||||
The driver provides the next attributes for the voltage:
|
||||
|
||||
- for voltage in: input, high critical threshold, high critical alarm, all only
|
||||
from page 0;
|
||||
- for voltage out: input, low and high critical thresholds, low and high
|
||||
critical alarms, from pages 0 and 1;
|
||||
|
||||
The driver exports the following attributes via the 'sysfs' files, where
|
||||
|
||||
- 'n' is number of telemetry pages (from 1 to 2);
|
||||
- indexes 1 for "iin";
|
||||
- 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**
|
||||
|
||||
The driver provides the next attributes for the power:
|
||||
|
||||
- for power in alarm and input.
|
||||
- for power out: highest and input.
|
||||
|
||||
The driver exports the following attributes via the 'sysfs' files, where
|
||||
|
||||
- 'n' is number of telemetry pages (from 1 to 2);
|
||||
- indexes 1 for "pin";
|
||||
- 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:
|
||||
|
||||
where the 4 usages can be:
|
||||
|
||||
- 'ever held in STATE context'
|
||||
- 'ever held as readlock in STATE context'
|
||||
- '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
|
||||
now they include:
|
||||
|
||||
- hardirq
|
||||
- softirq
|
||||
|
||||
where the last 1 category is:
|
||||
|
||||
- 'ever used' [ == !unused ]
|
||||
|
||||
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 |
|
||||
+--------------+-------------+--------------+
|
||||
| ever in irq | ? | - |
|
||||
| ever in irq | '?' | '-' |
|
||||
+--------------+-------------+--------------+
|
||||
| never in irq | + | . |
|
||||
| never in irq | '+' | '.' |
|
||||
+--------------+-------------+--------------+
|
||||
|
||||
The character '-' suggests irq is disabled because if otherwise the
|
||||
|
@ -216,7 +219,7 @@ looks like this::
|
|||
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
|
||||
partition.
|
||||
|
@ -334,7 +337,7 @@ Troubleshooting:
|
|||
----------------
|
||||
|
||||
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))
|
||||
|
||||
|
@ -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:
|
||||
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:
|
||||
|
||||
|
@ -448,20 +452,22 @@ There are simply four block conditions:
|
|||
|
||||
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)
|
||||
|
||||
|
||||
acquired recursively. Unlike non-recursive read locks, recursive read locks
|
||||
only get blocked by current write lock *holders* other than write lock
|
||||
*waiters*, for example:
|
||||
*waiters*, for example::
|
||||
|
||||
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
|
||||
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:
|
||||
|
||||
|
@ -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
|
||||
deadlock detection.
|
||||
|
||||
For each lock dependency:
|
||||
For each lock dependency::
|
||||
|
||||
L1 -> L2
|
||||
|
||||
|
@ -525,20 +531,25 @@ same types).
|
|||
With the above combination for simplification, there are 4 types of dependency edges
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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:
|
||||
|
||||
|
@ -592,11 +603,11 @@ circles that won't cause deadlocks.
|
|||
|
||||
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
|
||||
|
||||
, which means we have dependencies:
|
||||
, which means we have dependencies::
|
||||
|
||||
L1 -> L2
|
||||
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 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
|
||||
have a circle:
|
||||
have a circle::
|
||||
|
||||
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
|
||||
required to uniquely identify the package.
|
||||
* - ``fw.app.bundle_id``
|
||||
- running
|
||||
- 0xc0000001
|
||||
- Unique identifier for the DDP package loaded in the device. Also
|
||||
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
|
||||
the statistics they don't report with 0.
|
||||
|
||||
.. kernel-doc:: include/linux/ethtool.h
|
||||
:identifiers: ethtool_pause_stats
|
||||
- ethtool_pause_stats()
|
||||
|
|
|
@ -22,6 +22,7 @@ place where this information is gathered.
|
|||
spec_ctrl
|
||||
accelerators/ocxl
|
||||
ioctl/index
|
||||
iommu
|
||||
media/index
|
||||
|
||||
.. only:: subproject and html
|
||||
|
|
|
@ -978,7 +978,7 @@ M: Michael Hennerich <Michael.Hennerich@analog.com>
|
|||
L: linux-iio@vger.kernel.org
|
||||
S: Supported
|
||||
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
|
||||
|
||||
ANALOG DEVICES INC AD7780 DRIVER
|
||||
|
@ -3857,7 +3857,7 @@ M: Roger Quadros <rogerq@ti.com>
|
|||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
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/
|
||||
|
||||
CADET FM/AM RADIO RECEIVER DRIVER
|
||||
|
@ -7916,7 +7916,7 @@ HISILICON LPC BUS DRIVER
|
|||
M: john.garry@huawei.com
|
||||
S: Maintained
|
||||
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
|
||||
|
||||
HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
|
||||
|
@ -14882,7 +14882,6 @@ RENESAS ETHERNET DRIVERS
|
|||
R: Sergei Shtylyov <sergei.shtylyov@gmail.com>
|
||||
L: netdev@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: drivers/net/ethernet/renesas/
|
||||
F: include/linux/sh_eth.h
|
||||
|
@ -18083,7 +18082,7 @@ M: Yu Chen <chenyu56@huawei.com>
|
|||
M: Binghui Wang <wangbinghui@hisilicon.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
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
|
||||
|
||||
USB ISP116X DRIVER
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* 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/pm_runtime.h>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* 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 <linux/dma-mapping.h>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* 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 <linux/dma-mapping.h>
|
||||
|
|
|
@ -239,9 +239,11 @@ bool amdgpu_device_supports_baco(struct drm_device *dev)
|
|||
return amdgpu_asic_supports_baco(adev);
|
||||
}
|
||||
|
||||
/*
|
||||
* VRAM access helper functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* VRAM access helper functions.
|
||||
*
|
||||
* amdgpu_device_vram_access - read/write a buffer in vram
|
||||
*
|
||||
* @adev: amdgpu_device pointer
|
||||
|
@ -705,7 +707,7 @@ void amdgpu_device_indirect_wreg64(struct amdgpu_device *adev,
|
|||
/**
|
||||
* amdgpu_invalid_rreg - dummy reg read function
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @reg: offset of register
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @reg: offset of 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @reg: offset of register
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @reg: offset of 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @block: offset of instance
|
||||
* @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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @block: offset of instance
|
||||
* @reg: offset of 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
|
||||
*
|
||||
* @dev: drm_device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* Allocates a scratch page of VRAM for use by various things in the
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu_device_pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @from_hypervisor: request from hypervisor
|
||||
*
|
||||
* do VF FLR and reinitialize Asic
|
||||
|
@ -4100,7 +4102,7 @@ error:
|
|||
/**
|
||||
* 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
|
||||
*/
|
||||
|
@ -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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device pointer
|
||||
* @adev: amdgpu_device pointer
|
||||
* @job: which job trigger hang
|
||||
*
|
||||
* 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 audio_suspended = false;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Special case: RAS triggered and full reset isn't supported
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @man: TTM memory type manager
|
||||
* @p_size: maximum size of GTT
|
||||
* @adev: amdgpu_device pointer
|
||||
* @gtt_size: maximum size of GTT
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @man: TTM memory type manager
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* Destroy and free the GTT manager, returns -EBUSY if ranges are still
|
||||
* 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
|
||||
*
|
||||
* @man: TTM memory type manager
|
||||
* @p_size: maximum size of VRAM
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* @man: TTM memory type manager
|
||||
* @adev: amdgpu_device pointer
|
||||
*
|
||||
* Destroy and free the VRAM manager, returns -EBUSY if ranges are still
|
||||
* 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
|
||||
*
|
||||
* @adev: amdgpu device structure
|
||||
* @adev: amdgpu_device pointer
|
||||
* @node: MM node structure
|
||||
*
|
||||
* 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 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 drm_display_mode *mode;
|
||||
unsigned long max_size = 0;
|
||||
|
|
|
@ -86,7 +86,7 @@ struct irq_list_head {
|
|||
* @bo_ptr: Pointer to the buffer object
|
||||
* @gpu_addr: MMIO gpu addr
|
||||
*/
|
||||
struct dm_comressor_info {
|
||||
struct dm_compressor_info {
|
||||
void *cpu_addr;
|
||||
struct amdgpu_bo *bo_ptr;
|
||||
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
|
||||
* @cached_state: Caches device atomic state for suspend/resume
|
||||
* @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
|
||||
* displays will be forced to synchronize.
|
||||
*/
|
||||
|
@ -324,7 +324,7 @@ struct amdgpu_display_manager {
|
|||
struct drm_atomic_state *cached_state;
|
||||
struct dc_state *cached_dc_state;
|
||||
|
||||
struct dm_comressor_info compressor;
|
||||
struct dm_compressor_info compressor;
|
||||
|
||||
const struct firmware *fw_dmcu;
|
||||
uint32_t dmcu_fw_version;
|
||||
|
|
|
@ -256,6 +256,7 @@ enum rdma_ch_state {
|
|||
* @rdma_cm: See below.
|
||||
* @rdma_cm.cm_id: RDMA CM ID associated with the channel.
|
||||
* @cq: IB completion queue for this channel.
|
||||
* @cq_size: Number of CQEs in @cq.
|
||||
* @zw_cqe: Zero-length write CQE.
|
||||
* @rcu: RCU head.
|
||||
* @kref: kref for this channel.
|
||||
|
|
|
@ -24,7 +24,7 @@ description:
|
|||
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
|
||||
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.
|
||||
|
||||
For SPI':'
|
||||
|
|
|
@ -235,6 +235,8 @@ enum hctx_type {
|
|||
* @flags: Zero or more BLK_MQ_F_* flags.
|
||||
* @driver_data: Pointer to data owned by the block driver that created this
|
||||
* 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
|
||||
* @__breserved_tags:
|
||||
* 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
|
||||
* @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
|
||||
* 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.
|
||||
* @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
|
||||
* refcount.
|
||||
*
|
||||
|
|
|
@ -147,16 +147,8 @@ typedef enum {
|
|||
PHY_INTERFACE_MODE_MAX,
|
||||
} phy_interface_t;
|
||||
|
||||
/**
|
||||
/*
|
||||
* 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 *speeds,
|
||||
|
@ -1022,14 +1014,9 @@ static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
|
|||
regnum, mask, set);
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* phy_read_mmd - Convenience function for reading a register
|
||||
* 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);
|
||||
|
||||
|
@ -1064,38 +1051,21 @@ int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
|
|||
__ret; \
|
||||
})
|
||||
|
||||
/**
|
||||
/*
|
||||
* __phy_read_mmd - Convenience function for reading a register
|
||||
* 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);
|
||||
|
||||
/**
|
||||
/*
|
||||
* phy_write_mmd - Convenience function for writing a register
|
||||
* 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);
|
||||
|
||||
/**
|
||||
/*
|
||||
* __phy_write_mmd - Convenience function for writing a register
|
||||
* 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);
|
||||
|
||||
|
|
|
@ -147,24 +147,6 @@ static inline unsigned int refcount_read(const refcount_t *r)
|
|||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
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
|
||||
* @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
|
||||
* 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)
|
||||
{
|
||||
__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
|
||||
* @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
|
||||
*/
|
||||
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)
|
||||
{
|
||||
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
|
||||
* @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
|
||||
* condition.
|
||||
*/
|
||||
static inline void __refcount_inc(refcount_t *r, int *oldp)
|
||||
{
|
||||
__refcount_add(1, r, oldp);
|
||||
}
|
||||
|
||||
static inline void refcount_inc(refcount_t *r)
|
||||
{
|
||||
__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
|
||||
* @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
|
||||
*/
|
||||
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)
|
||||
{
|
||||
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
|
||||
* @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
|
||||
*/
|
||||
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)
|
||||
{
|
||||
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
|
||||
* @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
|
||||
* 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)
|
||||
{
|
||||
__refcount_dec(r, NULL);
|
||||
|
|
|
@ -1092,7 +1092,11 @@ sub output_struct_rst(%) {
|
|||
print "\n\n.. c:type:: " . $name . "\n\n";
|
||||
} else {
|
||||
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);
|
||||
$lineprefix = " ";
|
||||
|
|
|
@ -432,7 +432,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* ASSERT_EQ(expected, seen)
|
||||
* ASSERT_EQ()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -443,7 +443,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, ==, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_NE(expected, seen)
|
||||
* ASSERT_NE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -454,7 +454,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, !=, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_LT(expected, seen)
|
||||
* ASSERT_LT()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -465,7 +465,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, <, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_LE(expected, seen)
|
||||
* ASSERT_LE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -476,7 +476,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, <=, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_GT(expected, seen)
|
||||
* ASSERT_GT()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -487,7 +487,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, >, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_GE(expected, seen)
|
||||
* ASSERT_GE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -498,7 +498,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, >=, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_NULL(seen)
|
||||
* ASSERT_NULL()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -508,7 +508,7 @@
|
|||
__EXPECT(NULL, "NULL", seen, #seen, ==, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_TRUE(seen)
|
||||
* ASSERT_TRUE()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -518,7 +518,7 @@
|
|||
__EXPECT(0, "0", seen, #seen, !=, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_FALSE(seen)
|
||||
* ASSERT_FALSE()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -528,7 +528,7 @@
|
|||
__EXPECT(0, "0", seen, #seen, ==, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_STREQ(expected, seen)
|
||||
* ASSERT_STREQ()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -539,7 +539,7 @@
|
|||
__EXPECT_STR(expected, seen, ==, 1)
|
||||
|
||||
/**
|
||||
* ASSERT_STRNE(expected, seen)
|
||||
* ASSERT_STRNE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -550,7 +550,7 @@
|
|||
__EXPECT_STR(expected, seen, !=, 1)
|
||||
|
||||
/**
|
||||
* EXPECT_EQ(expected, seen)
|
||||
* EXPECT_EQ()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -561,7 +561,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, ==, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_NE(expected, seen)
|
||||
* EXPECT_NE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -572,7 +572,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, !=, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_LT(expected, seen)
|
||||
* EXPECT_LT()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -583,7 +583,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, <, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_LE(expected, seen)
|
||||
* EXPECT_LE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -594,7 +594,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, <=, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_GT(expected, seen)
|
||||
* EXPECT_GT()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -605,7 +605,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, >, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_GE(expected, seen)
|
||||
* EXPECT_GE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -616,7 +616,7 @@
|
|||
__EXPECT(expected, #expected, seen, #seen, >=, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_NULL(seen)
|
||||
* EXPECT_NULL()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -626,7 +626,7 @@
|
|||
__EXPECT(NULL, "NULL", seen, #seen, ==, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_TRUE(seen)
|
||||
* EXPECT_TRUE()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -636,7 +636,7 @@
|
|||
__EXPECT(0, "0", seen, #seen, !=, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_FALSE(seen)
|
||||
* EXPECT_FALSE()
|
||||
*
|
||||
* @seen: measured value
|
||||
*
|
||||
|
@ -646,7 +646,7 @@
|
|||
__EXPECT(0, "0", seen, #seen, ==, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_STREQ(expected, seen)
|
||||
* EXPECT_STREQ()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
@ -657,7 +657,7 @@
|
|||
__EXPECT_STR(expected, seen, ==, 0)
|
||||
|
||||
/**
|
||||
* EXPECT_STRNE(expected, seen)
|
||||
* EXPECT_STRNE()
|
||||
*
|
||||
* @expected: expected value
|
||||
* @seen: measured value
|
||||
|
|
Загрузка…
Ссылка в новой задаче