1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the "License"). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets "[]" replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 22 # 23 # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 # Use is subject to license terms. 25 # 26 27 # 28 # ASSERTION: Sched probe arguments should be valid. 29 # 30 31 if [ $# != 1 ]; then 32 echo expected one argument: '<'dtrace-path'>' 33 exit 2 34 fi 35 36 # 37 # do not fail test in a domU 38 # 39 if [ ! -c /dev/xen/privcmd ]; then 40 exit 0 41 fi 42 43 dtrace=$1 44 outf=/tmp/sched.args.$$ 45 46 script() 47 { 48 $dtrace -c '/usr/bin/sleep 10' -o $outf -qs /dev/stdin <<EOF 49 xdt:sched::off-cpu, 50 xdt:sched::on-cpu, 51 xdt:sched::block, 52 xdt:sched::sleep, 53 xdt:sched::wake, 54 xdt:sched::yield 55 { 56 /* print domid vcpu pcpu probename */ 57 printf("%d %d %d %s\n", arg0, arg1, \`xdt_curpcpu, probename); 58 } 59 EOF 60 } 61 62 validate() 63 { 64 /usr/xpg4/bin/awk ' 65 BEGIN { 66 while (("/usr/sbin/xm vcpu-list" | getline)) { 67 if ($1 != "Name") { 68 domid = $2 69 vcpu = $3 70 71 vcpumap[domid, vcpu] = 1 72 73 split($7, affinity, ",") 74 for (i in affinity) { 75 if (split(affinity[i], p, "-") > 1) { 76 for (pcpu = p[1]; pcpu <= p[2];\ 77 pcpu++) { 78 cpumap[domid, vcpu, 79 pcpu] = 1 80 } 81 } else { 82 cpumap[domid, vcpu, 83 affinity[i]] = 1 84 } 85 } 86 } 87 } 88 } 89 90 /^$/ { next } 91 92 /wake/ { 93 if (vcpumap[$1, $2]) { 94 next 95 } else { 96 print "error: " $0 97 exit 1 98 } 99 } 100 101 { 102 if (cpumap[$1, $2, "any"] || cpumap[$1, $2, $3]) { 103 next 104 } else { 105 print "error: " $0 106 exit 1 107 } 108 } 109 ' $outf 110 } 111 112 script 113 status=$? 114 115 if [ $status == 0 ]; then 116 validate 117 status=$? 118 fi 119 120 rm $outf 121 exit $status