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 31if [ $# != 1 ]; then 32 echo expected one argument: '<'dtrace-path'>' 33 exit 2 34fi 35 36# 37# do not fail test in a domU 38# 39if [ ! -c /dev/xen/privcmd ]; then 40 exit 0 41fi 42 43dtrace=$1 44outf=/tmp/sched.args.$$ 45 46script() 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 } 59EOF 60} 61 62validate() 63{ 64 /usr/bin/nawk ' 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 112script 113status=$? 114 115if [ $status == 0 ]; then 116 validate 117 status=$? 118fi 119 120rm $outf 121exit $status 122