Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / rcutorture / bin / kvm-assign-cpus.sh
blob46b08cd16ba5c2e8fccb6464721d7c810d98c6f6
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0+
4 # Produce awk statements roughly depicting the system's CPU and cache
5 # layout. If the required information is not available, produce
6 # error messages as awk comments. Successful exit regardless.
8 # Usage: kvm-assign-cpus.sh /path/to/sysfs
10 T="`mktemp -d ${TMPDIR-/tmp}/kvm-assign-cpus.sh.XXXXXX`"
11 trap 'rm -rf $T' 0 2
13 sysfsdir=${1-/sys/devices/system/node}
14 if ! cd "$sysfsdir" > $T/msg 2>&1
15 then
16 sed -e 's/^/# /' < $T/msg
17 exit 0
19 nodelist="`ls -d node*`"
20 for i in node*
22 if ! test -d $i/
23 then
24 echo "# Not a directory: $sysfsdir/node*"
25 exit 0
27 for j in $i/cpu*/cache/index*
29 if ! test -d $j/
30 then
31 echo "# Not a directory: $sysfsdir/$j"
32 exit 0
33 else
34 break
36 done
37 indexlist="`ls -d $i/cpu* | grep 'cpu[0-9][0-9]*' | head -1 | sed -e 's,^.*$,ls -d &/cache/index*,' | sh | sed -e 's,^.*/,,'`"
38 break
39 done
40 for i in node*/cpu*/cache/index*/shared_cpu_list
42 if ! test -f $i
43 then
44 echo "# Not a file: $sysfsdir/$i"
45 exit 0
46 else
47 break
49 done
50 firstshared=
51 for i in $indexlist
53 rm -f $T/cpulist
54 for n in node*
56 f="$n/cpu*/cache/$i/shared_cpu_list"
57 if ! cat $f > $T/msg 2>&1
58 then
59 sed -e 's/^/# /' < $T/msg
60 exit 0
62 cat $f >> $T/cpulist
63 done
64 if grep -q '[-,]' $T/cpulist
65 then
66 if test -z "$firstshared"
67 then
68 firstshared="$i"
71 done
72 if test -z "$firstshared"
73 then
74 splitindex="`echo $indexlist | sed -e 's/ .*$//'`"
75 else
76 splitindex="$firstshared"
78 nodenum=0
79 for n in node*
81 cat $n/cpu*/cache/$splitindex/shared_cpu_list | sort -u -k1n |
82 awk -v nodenum="$nodenum" '
83 BEGIN {
84 idx = 0;
88 nlists = split($0, cpulists, ",");
89 for (i = 1; i <= nlists; i++) {
90 listsize = split(cpulists[i], cpus, "-");
91 if (listsize == 1)
92 cpus[2] = cpus[1];
93 for (j = cpus[1]; j <= cpus[2]; j++) {
94 print "cpu[" nodenum "][" idx "] = " j ";";
95 idx++;
100 END {
101 print "nodecpus[" nodenum "] = " idx ";";
103 nodenum=`expr $nodenum + 1`
104 done
105 echo "numnodes = $nodenum;"