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:
Linus Torvalds 2020-11-03 13:14:14 -08:00
commit e6b0bd61a7
31 changed files with 206 additions and 211 deletions

View File

@ -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

View File

@ -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
---------------------- ----------------------

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -132,6 +132,7 @@ Hardware Monitoring Kernel Drivers
mcp3021 mcp3021
menf21bmc menf21bmc
mlxreg-fan mlxreg-fan
mp2975
nct6683 nct6683
nct6775 nct6775
nct7802 nct7802

View File

@ -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";

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -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.

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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':'

View File

@ -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

View File

@ -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.
* *

View File

@ -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);

View File

@ -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);

View File

@ -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 = " ";

View File

@ -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