944bc9cca7
Use __always_inline for atomic fallback wrappers. When building for size (CC_OPTIMIZE_FOR_SIZE), some compilers appear to be less inclined to inline even relatively small static inline functions that are assumed to be inlinable such as atomic ops. This can cause problems, for example in UACCESS regions. While the fallback wrappers aren't pure wrappers, they are trivial nonetheless, and the function they wrap should determine the final inlining policy. For x86 tinyconfig we observe: - vmlinux baseline: 1315988 - vmlinux with patch: 1315928 (-60 bytes) Suggested-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Marco Elver <elver@google.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
16 lines
325 B
Plaintext
Executable File
16 lines
325 B
Plaintext
Executable File
cat <<EOF
|
|
/**
|
|
* ${atomic}_inc_and_test - increment and test
|
|
* @v: pointer of type ${atomic}_t
|
|
*
|
|
* Atomically increments @v by 1
|
|
* and returns true if the result is zero, or false for all
|
|
* other cases.
|
|
*/
|
|
static __always_inline bool
|
|
${atomic}_inc_and_test(${atomic}_t *v)
|
|
{
|
|
return ${atomic}_inc_return(v) == 0;
|
|
}
|
|
EOF
|