1*b9e93c10SJonathan Haslam#!/bin/ksh
2*b9e93c10SJonathan Haslam#
3*b9e93c10SJonathan Haslam# CDDL HEADER START
4*b9e93c10SJonathan Haslam#
5*b9e93c10SJonathan Haslam# The contents of this file are subject to the terms of the
6*b9e93c10SJonathan Haslam# Common Development and Distribution License (the "License").
7*b9e93c10SJonathan Haslam# You may not use this file except in compliance with the License.
8*b9e93c10SJonathan Haslam#
9*b9e93c10SJonathan Haslam# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*b9e93c10SJonathan Haslam# or http://www.opensolaris.org/os/licensing.
11*b9e93c10SJonathan Haslam# See the License for the specific language governing permissions
12*b9e93c10SJonathan Haslam# and limitations under the License.
13*b9e93c10SJonathan Haslam#
14*b9e93c10SJonathan Haslam# When distributing Covered Code, include this CDDL HEADER in each
15*b9e93c10SJonathan Haslam# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*b9e93c10SJonathan Haslam# If applicable, add the following below this CDDL HEADER, with the
17*b9e93c10SJonathan Haslam# fields enclosed by brackets "[]" replaced with your own identifying
18*b9e93c10SJonathan Haslam# information: Portions Copyright [yyyy] [name of copyright owner]
19*b9e93c10SJonathan Haslam#
20*b9e93c10SJonathan Haslam# CDDL HEADER END
21*b9e93c10SJonathan Haslam#
22*b9e93c10SJonathan Haslam
23*b9e93c10SJonathan Haslam#
24*b9e93c10SJonathan Haslam# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25*b9e93c10SJonathan Haslam# Use is subject to license terms.
26*b9e93c10SJonathan Haslam#
27*b9e93c10SJonathan Haslam
28*b9e93c10SJonathan Haslam
29*b9e93c10SJonathan Haslam#
30*b9e93c10SJonathan Haslam# This tests that cpustat(1) should fail to start if the cpc provider
31*b9e93c10SJonathan Haslam# is already calling the shots.
32*b9e93c10SJonathan Haslam#
33*b9e93c10SJonathan Haslam# This script will fail if:
34*b9e93c10SJonathan Haslam#       1) The system under test does not define the 'PAPI_tot_ins'
35*b9e93c10SJonathan Haslam#       generic event.
36*b9e93c10SJonathan Haslam
37*b9e93c10SJonathan Haslamscript()
38*b9e93c10SJonathan Haslam{
39*b9e93c10SJonathan Haslam	$dtrace -o $dtraceout -s /dev/stdin <<EOF
40*b9e93c10SJonathan Haslam	#pragma D option bufsize=128k
41*b9e93c10SJonathan Haslam
42*b9e93c10SJonathan Haslam	cpc:::PAPI_tot_ins-all-10000
43*b9e93c10SJonathan Haslam	{
44*b9e93c10SJonathan Haslam		@[probename] = count();
45*b9e93c10SJonathan Haslam	}
46*b9e93c10SJonathan HaslamEOF
47*b9e93c10SJonathan Haslam}
48*b9e93c10SJonathan Haslam
49*b9e93c10SJonathan Haslamif [ $# != 1 ]; then
50*b9e93c10SJonathan Haslam	echo expected one argument: '<'dtrace-path'>'
51*b9e93c10SJonathan Haslam	exit 2
52*b9e93c10SJonathan Haslamfi
53*b9e93c10SJonathan Haslam
54*b9e93c10SJonathan Haslamdtrace=$1
55*b9e93c10SJonathan Haslamdtraceout=/tmp/dtrace.out.$$
56*b9e93c10SJonathan Haslamscript 2>/dev/null &
57*b9e93c10SJonathan Haslamtimeout=15
58*b9e93c10SJonathan Haslam
59*b9e93c10SJonathan Haslam#
60*b9e93c10SJonathan Haslam# Sleep while the above script fires into life. To guard against dtrace dying
61*b9e93c10SJonathan Haslam# and us sleeping forever we allow 15 secs for this to happen. This should be
62*b9e93c10SJonathan Haslam# enough for even the slowest systems.
63*b9e93c10SJonathan Haslam#
64*b9e93c10SJonathan Haslamwhile [ ! -f $dtraceout ]; do
65*b9e93c10SJonathan Haslam	sleep 1
66*b9e93c10SJonathan Haslam	timeout=$(($timeout-1))
67*b9e93c10SJonathan Haslam	if [ $timeout -eq 0 ]; then
68*b9e93c10SJonathan Haslam		echo "dtrace failed to start. Exiting."
69*b9e93c10SJonathan Haslam		exit 1
70*b9e93c10SJonathan Haslam	fi
71*b9e93c10SJonathan Haslamdone
72*b9e93c10SJonathan Haslam
73*b9e93c10SJonathan Haslamcpustat -c PAPI_tot_ins 1 5
74*b9e93c10SJonathan Haslamstatus=$?
75*b9e93c10SJonathan Haslam
76*b9e93c10SJonathan Haslamrm $dtraceout
77*b9e93c10SJonathan Haslam
78*b9e93c10SJonathan Haslamexit $status
79