Commit 3570a1bc authored by Marco Elver's avatar Marco Elver Committed by Paul E. McKenney
Browse files

locking/atomics: Use read-write instrumentation for atomic RMWs



Use instrument_atomic_read_write() for atomic RMW ops.

Cc: Will Deacon <will@kernel.org>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: <linux-arch@vger.kernel.org>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarMarco Elver <elver@google.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent b159eecc
Loading
Loading
Loading
Loading
+165 −165

File changed.

Preview size limit exceeded, changes collapsed.

+15 −6
Original line number Diff line number Diff line
@@ -5,9 +5,10 @@ ATOMICDIR=$(dirname $0)

. ${ATOMICDIR}/atomic-tbl.sh

#gen_param_check(arg)
#gen_param_check(meta, arg)
gen_param_check()
{
	local meta="$1"; shift
	local arg="$1"; shift
	local type="${arg%%:*}"
	local name="$(gen_param_name "${arg}")"
@@ -17,17 +18,25 @@ gen_param_check()
	i) return;;
	esac

	# We don't write to constant parameters
	[ ${type#c} != ${type} ] && rw="read"
	if [ ${type#c} != ${type} ]; then
		# We don't write to constant parameters.
		rw="read"
	elif [ "${meta}" != "s" ]; then
		# An atomic RMW: if this parameter is not a constant, and this atomic is
		# not just a 's'tore, this parameter is both read from and written to.
		rw="read_write"
	fi

	printf "\tinstrument_atomic_${rw}(${name}, sizeof(*${name}));\n"
}

#gen_param_check(arg...)
#gen_params_checks(meta, arg...)
gen_params_checks()
{
	local meta="$1"; shift

	while [ "$#" -gt 0 ]; do
		gen_param_check "$1"
		gen_param_check "$meta" "$1"
		shift;
	done
}
@@ -77,7 +86,7 @@ gen_proto_order_variant()

	local ret="$(gen_ret_type "${meta}" "${int}")"
	local params="$(gen_params "${int}" "${atomic}" "$@")"
	local checks="$(gen_params_checks "$@")"
	local checks="$(gen_params_checks "${meta}" "$@")"
	local args="$(gen_args "$@")"
	local retstmt="$(gen_ret_stmt "${meta}")"