mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
Now that arch_atomic*() usage is limited to the atomic headers, we no longer have any users of arch_atomic_long_*(), and can generate raw_atomic_long_*() directly. Generate the raw_atomic_long_*() ops directly. There should be no functional change as a result of this patch. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20230605070124.3741859-20-mark.rutland@arm.com
81 lines
1.7 KiB
Bash
81 lines
1.7 KiB
Bash
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
ATOMICDIR=$(dirname $0)
|
|
|
|
. ${ATOMICDIR}/atomic-tbl.sh
|
|
|
|
#gen_proto_order_variant(meta, pfx, name, sfx, order, atomic, int, arg...)
|
|
gen_proto_order_variant()
|
|
{
|
|
local meta="$1"; shift
|
|
local pfx="$1"; shift
|
|
local name="$1"; shift
|
|
local sfx="$1"; shift
|
|
local order="$1"; shift
|
|
local atomic="$1"; shift
|
|
local int="$1"; shift
|
|
|
|
local atomicname="${atomic}_${pfx}${name}${sfx}${order}"
|
|
|
|
local ret="$(gen_ret_type "${meta}" "${int}")"
|
|
local params="$(gen_params "${int}" "${atomic}" "$@")"
|
|
local args="$(gen_args "$@")"
|
|
local retstmt="$(gen_ret_stmt "${meta}")"
|
|
|
|
cat <<EOF
|
|
static __always_inline ${ret}
|
|
raw_${atomicname}(${params})
|
|
{
|
|
${retstmt}arch_${atomicname}(${args});
|
|
}
|
|
|
|
EOF
|
|
}
|
|
|
|
gen_xchg()
|
|
{
|
|
local xchg="$1"; shift
|
|
local order="$1"; shift
|
|
|
|
cat <<EOF
|
|
#define raw_${xchg}${order}(...) \\
|
|
arch_${xchg}${order}(__VA_ARGS__)
|
|
EOF
|
|
}
|
|
|
|
cat << EOF
|
|
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
// Generated by $0
|
|
// DO NOT MODIFY THIS FILE DIRECTLY
|
|
|
|
#ifndef _LINUX_ATOMIC_RAW_H
|
|
#define _LINUX_ATOMIC_RAW_H
|
|
|
|
EOF
|
|
|
|
grep '^[a-z]' "$1" | while read name meta args; do
|
|
gen_proto "${meta}" "${name}" "atomic" "int" ${args}
|
|
done
|
|
|
|
grep '^[a-z]' "$1" | while read name meta args; do
|
|
gen_proto "${meta}" "${name}" "atomic64" "s64" ${args}
|
|
done
|
|
|
|
for xchg in "xchg" "cmpxchg" "cmpxchg64" "cmpxchg128" "try_cmpxchg" "try_cmpxchg64" "try_cmpxchg128"; do
|
|
for order in "" "_acquire" "_release" "_relaxed"; do
|
|
gen_xchg "${xchg}" "${order}"
|
|
printf "\n"
|
|
done
|
|
done
|
|
|
|
for xchg in "cmpxchg_local" "cmpxchg64_local" "cmpxchg128_local" "sync_cmpxchg" "try_cmpxchg_local" "try_cmpxchg64_local" "try_cmpxchg128_local"; do
|
|
gen_xchg "${xchg}" ""
|
|
printf "\n"
|
|
done
|
|
|
|
cat <<EOF
|
|
#endif /* _LINUX_ATOMIC_RAW_H */
|
|
EOF
|