c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# CDDL HEADER START
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# The contents of this file are subject to the terms of the
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Common Development and Distribution License (the "License").
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# You may not use this file except in compliance with the License.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# or http://www.opensolaris.org/os/licensing.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# See the License for the specific language governing permissions
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# and limitations under the License.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# When distributing Covered Code, include this CDDL HEADER in each
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# If applicable, add the following below this CDDL HEADER, with the
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# fields enclosed by brackets "[]" replaced with your own identifying
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# information: Portions Copyright [yyyy] [name of copyright owner]
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# CDDL HEADER END
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
df0345f7d6cc87cde9e532e8362f1aca053d98ccJohn Sonnenschein# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Use is subject to license terms.
c9f77c52c0735e65aa2534394c5151cdb963cbefAndy Stormont# Copyright (c) 2014 Racktop Systems.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Lgrp.pm provides procedural and object-oriented interface to the Solaris
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# liblgrp(3LIB) library.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c9f77c52c0735e65aa2534394c5151cdb963cbefAndy Stormontrequire 5.0010;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse strict;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse warnings;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse Carp;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbpackage Sun::Solaris::Lgrp;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelsonour $VERSION = '1.1';
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbuse XSLoader;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbXSLoader::load(__PACKAGE__, $VERSION);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbrequire Exporter;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbour @ISA = qw(Exporter);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbour (@EXPORT_OK, %EXPORT_TAGS);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Things to export
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @lgrp_constants = qw(LGRP_AFF_NONE LGRP_AFF_STRONG LGRP_AFF_WEAK
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_CONTENT_DIRECT LGRP_CONTENT_HIERARCHY
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_MEM_SZ_FREE LGRP_MEM_SZ_INSTALLED LGRP_VER_CURRENT
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_VER_NONE LGRP_VIEW_CALLER
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_VIEW_OS LGRP_NONE
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_RSRC_CPU LGRP_RSRC_MEM
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb LGRP_CONTENT_ALL LGRP_LAT_CPU_TO_MEM
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @proc_constants = qw(P_PID P_LWPID P_MYID);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @constants = (@lgrp_constants, @proc_constants);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @functions = qw(lgrp_affinity_get lgrp_affinity_set
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_children lgrp_cookie_stale lgrp_cpus lgrp_fini
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_home lgrp_init lgrp_latency lgrp_latency_cookie
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_mem_size lgrp_nlgrps lgrp_parents
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_root lgrp_version lgrp_view lgrp_resources
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_isleaf lgrp_lgrps lgrp_leaves);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbmy @all = (@constants, @functions);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Define symbolic names for various subsets of export lists
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb%EXPORT_TAGS = ('CONSTANTS' => \@constants,
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb 'LGRP_CONSTANTS' => \@lgrp_constants,
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb 'PROC_CONSTANTS' => \@proc_constants,
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb 'FUNCTIONS' => \@functions,
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb 'ALL' => \@all);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Define things that are ok ot export.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb@EXPORT_OK = ( @{ $EXPORT_TAGS{'ALL'} } );
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# _usage(): print error message and terminate the program.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub _usage
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $msg = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb Carp::croak "Usage: Sun::Solaris::Lgrp::$msg";
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# lgrp_isleaf($cookie, $lgrp)
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Returns T if lgrp is leaf, F otherwise.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub lgrp_isleaf
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 2 or _usage "lgrp_isleaf(cookie, lgrp)";
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (!lgrp_children(shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# lgrp_lgrps($cookie, [$lgrp])
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Returns: list of lgrps in a subtree starting from $lgrp.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# If $root is not specified, use lgrp_root.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# undef on failure.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub lgrp_lgrps
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ > 0 or _usage("lgrp_lgrps(cookie, [lgrp])");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $cookie = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $root = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $root = lgrp_root($cookie) unless defined $root;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return unless defined $root;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my @children = lgrp_children($cookie, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my @result;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb #
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb # Concatenate root with subtrees for every children. Every subtree is
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb # obtained by calling lgrp_lgrps recursively with each of the children
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb # as the argument.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb #
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb @result = @children ?
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb ($root, map {lgrp_lgrps($cookie, $_)} @children) :
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb ($root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (wantarray ? @result : scalar @result);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# lgrp_leaves($cookie, [$lgrp])
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Returns: list of leaves in the hierarchy starting from $lgrp.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# If $lgrp is not specified, use lgrp_root.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# undef on failure.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub lgrp_leaves
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ > 0 or _usage("lgrp_leaves(cookie, [lgrp])");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $cookie = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $root = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $root = lgrp_root($cookie) unless defined $root;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return unless defined $root;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my @result = grep {
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_isleaf($cookie, $_)
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb } lgrp_lgrps($cookie, $root);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (wantarray ? @result : scalar @result);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Object-Oriented interface.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb######################################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# cookie: extract cookie from the argument.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# If the argument is scalar, it is the cookie itself, otherwise it is the
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# reference to the object and the cookie value is in $self->{COOKIE}.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub cookie
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $self = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return ((ref $self) ? $self->{COOKIE} : $self);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# new: The object constructor
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub new
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my $class = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb my ($self, $view);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $view = shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb $self->{COOKIE} = ($view ? lgrp_init($view) : lgrp_init()) or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb croak("lgrp_init: $!\n"), return;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb bless($self, $class) if defined($class);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb bless($self) unless defined($class);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return ($self);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# DESTROY: the object destructor.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub DESTROY
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_fini(cookie(shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb############################################################
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Wrapper methods.
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb#
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub stale
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 1 or _usage("stale(class)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_cookie_stale(cookie(shift)));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub view
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 1 or _usage("view(class)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_view(cookie(shift)));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub root
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 1 or _usage("root(class)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_root(cookie(shift)));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub nlgrps
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 1 or _usage("nlgrps(class)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_nlgrps(cookie(shift)));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub lgrps
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ > 0 or _usage("lgrps(class, [lgrp])");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_lgrps(cookie(shift), shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub leaves
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ > 0 or _usage("leaves(class, [lgrp])");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_leaves(cookie(shift), shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub version
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ > 0 or _usage("leaves(class, [version])");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_version(shift || 0));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub children
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 2 or _usage("children(class, lgrp)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_children(cookie(shift), shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub parents
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 2 or _usage("parents(class, lgrp)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_parents(cookie(shift), shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub mem_size
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 4 or _usage("mem_size(class, lgrp, type, content)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_mem_size(cookie(shift), shift, shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub cpus
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 3 or _usage("cpus(class, lgrp, content)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_cpus(cookie(shift), shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub isleaf
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 2 or _usage("isleaf(class, lgrp)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb lgrp_isleaf(cookie(shift), shift);
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub resources
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 3 or _usage("resources(class, lgrp, resource)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_resources(cookie(shift), shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub latency
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 3 or _usage("latency(class, from, to)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_latency_cookie(cookie(shift), shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb# Methods that do not require cookie
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub home
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 3 or _usage("home(class, idtype, id)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_home(shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub affinity_get
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 4 or _usage("affinity_get(class, idtype, id, lgrp)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_affinity_get(shift, shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolbsub affinity_set
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb{
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb scalar @_ == 5 or
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb _usage("affinity_set(class, idtype, id, lgrp, affinity)");
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb shift;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb return (lgrp_affinity_set(shift, shift, shift, shift));
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb}
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb1;
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb
c64027834c5ffc60c557c2b12555e0cd4d30320cakolb__END__