tst.schedargs.ksh revision 11270:47a962fe7b45
1251881Speter#
2251881Speter# CDDL HEADER START
3251881Speter#
4251881Speter# The contents of this file are subject to the terms of the
5251881Speter# Common Development and Distribution License (the "License").
6251881Speter# You may not use this file except in compliance with the License.
7251881Speter#
8251881Speter# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9251881Speter# or http://www.opensolaris.org/os/licensing.
10251881Speter# See the License for the specific language governing permissions
11251881Speter# and limitations under the License.
12251881Speter#
13251881Speter# When distributing Covered Code, include this CDDL HEADER in each
14251881Speter# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15251881Speter# If applicable, add the following below this CDDL HEADER, with the
16251881Speter# fields enclosed by brackets "[]" replaced with your own identifying
17251881Speter# information: Portions Copyright [yyyy] [name of copyright owner]
18251881Speter#
19251881Speter# CDDL HEADER END
20251881Speter#
21251881Speter
22251881Speter#
23251881Speter# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24251881Speter# Use is subject to license terms.
25251881Speter#
26251881Speter
27251881Speter#
28251881Speter# ASSERTION: Sched probe arguments should be valid. 
29251881Speter#
30251881Speter
31251881Speterif [ $# != 1 ]; then
32251881Speter	echo expected one argument: '<'dtrace-path'>'
33251881Speter	exit 2
34251881Speterfi
35251881Speter
36251881Speter#
37251881Speter# do not fail test in a domU
38251881Speter#
39251881Speterif [ ! -c /dev/xen/privcmd ]; then
40251881Speter	exit 0
41251881Speterfi
42251881Speter
43251881Speterdtrace=$1
44251881Speteroutf=/tmp/sched.args.$$
45251881Speter
46251881Speterscript()
47251881Speter{
48251881Speter	$dtrace -c '/usr/bin/sleep 10' -o $outf -qs /dev/stdin <<EOF
49251881Speter	xdt:sched::off-cpu,
50251881Speter	xdt:sched::on-cpu,
51251881Speter	xdt:sched::block,
52251881Speter	xdt:sched::sleep,
53251881Speter	xdt:sched::wake,
54251881Speter	xdt:sched::yield
55251881Speter	{
56251881Speter		/* print domid vcpu pcpu probename */
57251881Speter		printf("%d %d %d %s\n", arg0, arg1, \`xdt_curpcpu, probename);
58251881Speter	}
59251881SpeterEOF
60251881Speter}
61251881Speter
62251881Spetervalidate()
63251881Speter{
64251881Speter	/usr/bin/nawk '
65251881Speter	BEGIN {
66251881Speter		while (("/usr/sbin/xm vcpu-list" | getline)) {
67251881Speter			if ($1 != "Name") {
68251881Speter				domid = $2
69251881Speter				vcpu = $3
70251881Speter
71251881Speter				vcpumap[domid, vcpu] = 1
72251881Speter
73251881Speter				split($7, affinity, ",")
74251881Speter				for (i in affinity) {
75251881Speter					if (split(affinity[i], p, "-") > 1) {
76251881Speter						for (pcpu = p[1]; pcpu <= p[2];\
77251881Speter						    pcpu++) {
78251881Speter							cpumap[domid, vcpu,
79251881Speter							    pcpu] = 1
80251881Speter						}
81251881Speter					} else {
82251881Speter						cpumap[domid, vcpu,
83251881Speter						    affinity[i]] = 1
84251881Speter					}
85251881Speter				}
86251881Speter			}
87251881Speter		}
88251881Speter	}
89251881Speter
90251881Speter	/^$/ { next }
91251881Speter
92251881Speter	/wake/ {
93251881Speter		if (vcpumap[$1, $2]) {
94251881Speter			next
95251881Speter		} else {
96251881Speter			print "error: " $0
97251881Speter			exit 1
98251881Speter		}
99251881Speter	}
100251881Speter
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