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