1210753Srpaulo# 2210753Srpaulo# CDDL HEADER START 3210753Srpaulo# 4210753Srpaulo# The contents of this file are subject to the terms of the 5210753Srpaulo# Common Development and Distribution License (the "License"). 6210753Srpaulo# You may not use this file except in compliance with the License. 7210753Srpaulo# 8210753Srpaulo# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9210753Srpaulo# or http://www.opensolaris.org/os/licensing. 10210753Srpaulo# See the License for the specific language governing permissions 11210753Srpaulo# and limitations under the License. 12210753Srpaulo# 13210753Srpaulo# When distributing Covered Code, include this CDDL HEADER in each 14210753Srpaulo# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15210753Srpaulo# If applicable, add the following below this CDDL HEADER, with the 16210753Srpaulo# fields enclosed by brackets "[]" replaced with your own identifying 17210753Srpaulo# information: Portions Copyright [yyyy] [name of copyright owner] 18210753Srpaulo# 19210753Srpaulo# CDDL HEADER END 20210753Srpaulo# 21210753Srpaulo 22210753Srpaulo# 23210753Srpaulo# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24210753Srpaulo# Use is subject to license terms. 25210753Srpaulo# 26210753Srpaulo 27210753Srpaulo# 28210753Srpaulo# ASSERTION: Sched probe arguments should be valid. 29210753Srpaulo# 30210753Srpaulo 31210753Srpauloif [ $# != 1 ]; then 32210753Srpaulo echo expected one argument: '<'dtrace-path'>' 33210753Srpaulo exit 2 34210753Srpaulofi 35210753Srpaulo 36210753Srpaulo# 37210753Srpaulo# do not fail test in a domU 38210753Srpaulo# 39210753Srpauloif [ ! -c /dev/xen/privcmd ]; then 40210753Srpaulo exit 0 41210753Srpaulofi 42210753Srpaulo 43210753Srpaulodtrace=$1 44210753Srpaulooutf=/tmp/sched.args.$$ 45210753Srpaulo 46210753Srpauloscript() 47210753Srpaulo{ 48210753Srpaulo $dtrace -c '/usr/bin/sleep 10' -o $outf -qs /dev/stdin <<EOF 49210753Srpaulo xdt:sched::off-cpu, 50210753Srpaulo xdt:sched::on-cpu, 51210753Srpaulo xdt:sched::block, 52210753Srpaulo xdt:sched::sleep, 53210753Srpaulo xdt:sched::wake, 54210753Srpaulo xdt:sched::yield 55210753Srpaulo { 56210753Srpaulo /* print domid vcpu pcpu probename */ 57210753Srpaulo printf("%d %d %d %s\n", arg0, arg1, \`xdt_curpcpu, probename); 58210753Srpaulo } 59210753SrpauloEOF 60210753Srpaulo} 61210753Srpaulo 62210753Srpaulovalidate() 63210753Srpaulo{ 64210753Srpaulo /usr/bin/nawk ' 65210753Srpaulo BEGIN { 66210753Srpaulo while (("/usr/sbin/xm vcpu-list" | getline)) { 67210753Srpaulo if ($1 != "Name") { 68210753Srpaulo domid = $2 69210753Srpaulo vcpu = $3 70210753Srpaulo 71210753Srpaulo vcpumap[domid, vcpu] = 1 72210753Srpaulo 73210753Srpaulo split($7, affinity, ",") 74210753Srpaulo for (i in affinity) { 75210753Srpaulo if (split(affinity[i], p, "-") > 1) { 76210753Srpaulo for (pcpu = p[1]; pcpu <= p[2];\ 77210753Srpaulo pcpu++) { 78210753Srpaulo cpumap[domid, vcpu, 79210753Srpaulo pcpu] = 1 80210753Srpaulo } 81210753Srpaulo } else { 82210753Srpaulo cpumap[domid, vcpu, 83210753Srpaulo affinity[i]] = 1 84210753Srpaulo } 85210753Srpaulo } 86210753Srpaulo } 87210753Srpaulo } 88210753Srpaulo } 89210753Srpaulo 90210753Srpaulo /^$/ { next } 91210753Srpaulo 92210753Srpaulo /wake/ { 93210753Srpaulo if (vcpumap[$1, $2]) { 94210753Srpaulo next 95210753Srpaulo } else { 96210753Srpaulo print "error: " $0 97210753Srpaulo exit 1 98210753Srpaulo } 99210753Srpaulo } 100210753Srpaulo 101210753Srpaulo { 102210753Srpaulo if (cpumap[$1, $2, "any"] || cpumap[$1, $2, $3]) { 103210753Srpaulo next 104210753Srpaulo } else { 105210753Srpaulo print "error: " $0 106210753Srpaulo exit 1 107210753Srpaulo } 108210753Srpaulo } 109210753Srpaulo ' $outf 110210753Srpaulo} 111210753Srpaulo 112210753Srpauloscript 113210753Srpaulostatus=$? 114210753Srpaulo 115210753Srpauloif [ $status == 0 ]; then 116210753Srpaulo validate 117210753Srpaulo status=$? 118210753Srpaulofi 119210753Srpaulo 120210753Srpaulorm $outf 121210753Srpauloexit $status 122