forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
locking/atomic: scripts: generate kerneldoc comments
Currently the atomics are documented in Documentation/atomic_t.txt, and have no kerneldoc comments. There are a sufficient number of gotchas (e.g. semantics, noinstr-safety) that it would be nice to have comments to call these out, and it would be nice to have kerneldoc comments such that these can be collated. While it's possible to derive the semantics from the code, this can be painful given the amount of indirection we currently have (e.g. fallback paths), and it's easy to be mislead by naming, e.g. * The unconditional void-returning ops *only* have relaxed variants without a _relaxed suffix, and can easily be mistaken for being fully ordered. It would be nice to give these a _relaxed() suffix, but this would result in significant churn throughout the kernel. * Our naming of conditional and unconditional+test ops is rather inconsistent, and it can be difficult to derive the name of an operation, or to identify where an op is conditional or unconditional+test. Some ops are clearly conditional: - dec_if_positive - add_unless - dec_unless_positive - inc_unless_negative Some ops are clearly unconditional+test: - sub_and_test - dec_and_test - inc_and_test However, what exactly those test is not obvious. A _test_zero suffix might be clearer. Others could be read ambiguously: - inc_not_zero // conditional - add_negative // unconditional+test It would probably be worth renaming these, e.g. to inc_unless_zero and add_test_negative. As a step towards making this more consistent and easier to understand, this patch adds kerneldoc comments for all generated *atomic*_*() functions. These are generated from templates, with some common text shared, making it easy to extend these in future if necessary. I've tried to make these as consistent and clear as possible, and I've deliberately ensured: * All ops have their ordering explicitly mentioned in the short and long description. * All test ops have "test" in their short description. * All ops are described as an expression using their usual C operator. For example: andnot: "Atomically updates @v to (@v & ~@i)" inc: "Atomically updates @v to (@v + 1)" Which may be clearer to non-naative English speakers, and allows all the operations to be described in the same style. * All conditional ops have their condition described as an expression using the usual C operators. For example: add_unless: "If (@v != @U), atomically updates @v to (@v + @i)" cmpxchg: "If (@v == @old), atomically updates @v to @new" Which may be clearer to non-naative English speakers, and allows all the operations to be described in the same style. * All bitwise ops (and,andnot,or,xor) explicitly mention that they are bitwise in their short description, so that they are not mistaken for performing their logical equivalents. * The noinstr safety of each op is explicitly described, with a description of whether or not to use the raw_ form of the op. There should be no functional change as a result of this patch. Reported-by: Paul E. McKenney <[email protected]> Signed-off-by: Mark Rutland <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Kees Cook <[email protected]> Link: https://lore.kernel.org/r/[email protected]
- Loading branch information
Mark Rutland
authored and
Peter Zijlstra
committed
Jun 5, 2023
1 parent
8aaf297
commit ad81107
Showing
29 changed files
with
5,940 additions
and
7 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic add with ${desc_order} ordering | ||
* @i: ${int} value to add | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v + @i) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic add and test if negative with ${desc_order} ordering | ||
* @i: ${int} value to add | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v + @i) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if the resulting value of @v is negative, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
if [ -z "${pfx}" ]; then | ||
desc_return="Return: @true if @v was updated, @false otherwise." | ||
fi | ||
|
||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic add unless value with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* @a: ${int} value to add | ||
* @u: ${int} value to compare with | ||
* | ||
* If (@v != @u), atomically updates @v to (@v + @a) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic bitwise AND with ${desc_order} ordering | ||
* @i: ${int} value | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v & @i) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic bitwise AND NOT with ${desc_order} ordering | ||
* @i: ${int} value | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v & ~@i) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic compare and exchange with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* @old: ${int} value to compare with | ||
* @new: ${int} value to assign | ||
* | ||
* If (@v == @old), atomically updates @v to @new with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: The original value of @v. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic decrement with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v - 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic decrement and test if zero with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v - 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if the resulting value of @v is zero, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic decrement if positive with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* If (@v > 0), atomically updates @v to (@v - 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if @v was updated, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic decrement unless positive with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* If (@v <= 0), atomically updates @v to (@v - 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if @v was updated, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic increment with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v + 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic increment and test if zero with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v + 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if the resulting value of @v is zero, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic increment unless zero with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* If (@v != 0), atomically updates @v to (@v + 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if @v was updated, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic increment unless negative with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* If (@v >= 0), atomically updates @v to (@v + 1) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: @true if @v was updated, @false otherwise. | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic bitwise OR with ${desc_order} ordering | ||
* @i: ${int} value | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically updates @v to (@v | @i) with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* ${desc_return} | ||
*/ | ||
EOF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
cat <<EOF | ||
/** | ||
* ${class}${atomicname}() - atomic load with ${desc_order} ordering | ||
* @v: pointer to ${atomic}_t | ||
* | ||
* Atomically loads the value of @v with ${desc_order} ordering. | ||
* | ||
* ${desc_noinstr} | ||
* | ||
* Return: The value loaded from @v. | ||
*/ | ||
EOF |
Oops, something went wrong.