DF-5131 / check_static.sh
#!/bin/sh # DF-5131 static verifier: enumerate every radeon_sync_resv()/radeon_sync_rings() # call site in sys/dev/drm/radeon/ and classify CHECKED (assigned/returned) vs # BARE (result discarded). Exit 1 if any BARE site outside the already-filed # DF-4871/DF-5089 pair is found. ROOT="${1:-/home/maxx/dfbsd/dfbsd}" DIR="$ROOT/sys/dev/drm/radeon" [ -d "$DIR" ] || { echo "no such dir: $DIR"; exit 2; } bare=0 new=0 echo "== radeon_sync_resv / radeon_sync_rings call-site audit ==" for f in "$DIR"/*.c; do n=$(basename "$f") [ "$n" = radeon_sync.c ] && continue rg -n 'radeon_sync_resv\(|radeon_sync_rings\(' "$f" 2>/dev/null | while IFS= read -r line; do ln=${line%%:*} call=${line#*:} case "$call" in *' = radeon_sync_'*|*'return radeon_sync_'*|*'if (radeon_sync_'*) printf 'CHECKED %s:%s\n' "$n" "$ln" ;; *) printf 'BARE %s:%s\t%s\n' "$n" "$ln" "$(echo "$call" | tr -d '\t' | cut -c1-60)" ;; esac done done | sort echo echo "-- summary --" for f in "$DIR"/*.c; do n=$(basename "$f") [ "$n" = radeon_sync.c ] && continue rg -n 'radeon_sync_resv\(|radeon_sync_rings\(' "$f" 2>/dev/null | while IFS= read -r line; do ln=${line%%:*}; call=${line#*:} case "$call" in *' = radeon_sync_'*|*'return radeon_sync_'*|*'if (radeon_sync_'*) ;; *) echo "$n:$ln" ;; esac done done > /tmp/df5131_bare.$$ echo "bare call sites found: $(wc -l < /tmp/df5131_bare.$$ | tr -d ' ')" # known/filed: DF-4871 r600_dma.c:466, DF-5089 si_dma.c:255 while read -r site; do case "$site" in r600_dma.c:4*) ;; si_dma.c:25*) ;; *) echo "UNFILED DEFECT: $site"; new=$((new+1)) ;; esac done < /tmp/df5131_bare.$$ rm -f /tmp/df5131_bare.$$ echo "unfiled bare call SITES above = the DF-5131 finding set: expect 7 sites (13 call lines)" |