c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# CDDL HEADER START
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# The contents of this file are subject to the terms of the
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# Common Development and Distribution License (the "License").
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# You may not use this file except in compliance with the License.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# or http://www.opensolaris.org/os/licensing.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# See the License for the specific language governing permissions
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# and limitations under the License.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# When distributing Covered Code, include this CDDL HEADER in each
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# If applicable, add the following below this CDDL HEADER, with the
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# fields enclosed by brackets "[]" replaced with your own identifying
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# information: Portions Copyright [yyyy] [name of copyright owner]
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# CDDL HEADER END
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
55f5292c612446ce6f93ddd248c0019b5974618bFrank Van Der Linden# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# Use is subject to license terms.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# ASSERTION: Sched probe arguments should be valid.
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqif [ $# != 1 ]; then
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq echo expected one argument: '<'dtrace-path'>'
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq exit 2
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqfi
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq# do not fail test in a domU
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq#
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqif [ ! -c /dev/xen/privcmd ]; then
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq exit 0
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqfi
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqdtrace=$1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqoutf=/tmp/sched.args.$$
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqscript()
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq{
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq $dtrace -c '/usr/bin/sleep 10' -o $outf -qs /dev/stdin <<EOF
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::off-cpu,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::on-cpu,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::block,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::sleep,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::wake,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq xdt:sched::yield
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq /* print domid vcpu pcpu probename */
121d13daefbeb0546d0d9c6ef16c753aa6890290Frank Van Der Linden printf("%d %d %d %s\n", arg0, arg1, \`xdt_curpcpu, probename);
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqEOF
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq}
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqvalidate()
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq{
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq /usr/bin/nawk '
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq BEGIN {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq while (("/usr/sbin/xm vcpu-list" | getline)) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq if ($1 != "Name") {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq domid = $2
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq vcpu = $3
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq vcpumap[domid, vcpu] = 1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq split($7, affinity, ",")
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq for (i in affinity) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq if (split(affinity[i], p, "-") > 1) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq for (pcpu = p[1]; pcpu <= p[2];\
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq pcpu++) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq cpumap[domid, vcpu,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq pcpu] = 1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq } else {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq cpumap[domid, vcpu,
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq affinity[i]] = 1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq /^$/ { next }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq /wake/ {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq if (vcpumap[$1, $2]) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq next
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq } else {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq print "error: " $0
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq exit 1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq if (cpumap[$1, $2, "any"] || cpumap[$1, $2, $3]) {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq next
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq } else {
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq print "error: " $0
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq exit 1
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq }
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq ' $outf
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq}
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqscript
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqstatus=$?
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqif [ $status == 0 ]; then
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq validate
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq status=$?
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqfi
c7158ae983f5a04c4a998f468ecefba6d23ba721tariq
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqrm $outf
c7158ae983f5a04c4a998f468ecefba6d23ba721tariqexit $status