Skip to content

Commit

Permalink
coccicheck: span checks across CPUs
Browse files Browse the repository at this point in the history
This adds parallelism by default to the "coccicheck" target using
spatch's "-max" and "-index" arguments.

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Nicolas Palix <nicolas.palix@imag.fr>
Signed-off-by: Michal Marek <mmarek@suse.cz>
  • Loading branch information
Kees Cook authored and Michal Marek committed Jul 3, 2013
1 parent 61cb48c commit 90d06a4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
5 changes: 5 additions & 0 deletions Documentation/coccinelle.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ To enable verbose messages set the V= variable, for example:

make coccicheck MODE=report V=1

By default, coccicheck tries to run as parallel as possible. To change
the parallelism, set the J= variable. For example, to run across 4 CPUs:

make coccicheck MODE=report J=4


Using Coccinelle with a single semantic patch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
31 changes: 28 additions & 3 deletions scripts/coccicheck
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,24 @@

SPATCH="`which ${SPATCH:=spatch}`"

trap kill_running SIGTERM SIGINT
declare -a SPATCH_PID

# The verbosity may be set by the environmental parameter V=
# as for example with 'make V=1 coccicheck'

if [ -n "$V" -a "$V" != "0" ]; then
VERBOSE=1
VERBOSE="$V"
else
VERBOSE=0
fi

if [ -z "$J" ]; then
NPROC=$(getconf _NPROCESSORS_ONLN)
else
NPROC="$J"
fi

FLAGS="$SPFLAGS -very_quiet"

# spatch only allows include directories with the syntax "-I include"
Expand Down Expand Up @@ -69,12 +78,28 @@ if [ "$ONLINE" = "0" ] ; then
fi

run_cmd() {
local i
if [ $VERBOSE -ne 0 ] ; then
echo "Running: $@"
echo "Running ($NPROC in parallel): $@"
fi
eval $@
for i in $(seq 0 $(( NPROC - 1)) ); do
eval "$@ -max $NPROC -index $i &"
SPATCH_PID[$i]=$!
if [ $VERBOSE -eq 2 ] ; then
echo "${SPATCH_PID[$i]} running"
fi
done
wait
}

kill_running() {
for i in $(seq $(( NPROC - 1 )) ); do
if [ $VERBOSE -eq 2 ] ; then
echo "Killing ${SPATCH_PID[$i]}"
fi
kill ${SPATCH_PID[$i]} 2>/dev/null
done
}

coccinelle () {
COCCI="$1"
Expand Down

0 comments on commit 90d06a4

Please sign in to comment.