svn commit: r184782 - head/usr.sbin/pmccontrol
Joseph Koshy
jkoshy at FreeBSD.org
Sun Nov 9 00:36:35 PST 2008
Author: jkoshy
Date: Sun Nov 9 08:36:35 2008
New Revision: 184782
URL: http://svn.freebsd.org/changeset/base/184782
Log:
Change the meaning of a "*" argument to option -c to mean 'all
unhalted CPUs', instead of 'all CPUs'. This change brings
pmccontrol(8) in line with pmcstat(8).
Modified:
head/usr.sbin/pmccontrol/pmccontrol.c
Modified: head/usr.sbin/pmccontrol/pmccontrol.c
==============================================================================
--- head/usr.sbin/pmccontrol/pmccontrol.c Sun Nov 9 07:58:23 2008 (r184781)
+++ head/usr.sbin/pmccontrol/pmccontrol.c Sun Nov 9 08:36:35 2008 (r184782)
@@ -133,21 +133,33 @@ pmcc_init_debug(void)
static int
pmcc_do_enable_disable(struct pmcc_op_list *op_list)
{
- unsigned char op;
int c, error, i, j, ncpu, npmc, t;
- int cpu, pmc;
+ cpumask_t haltedcpus, cpumask;
struct pmcc_op *np;
unsigned char *map;
+ unsigned char op;
+ int cpu, pmc;
+ size_t dummy;
if ((ncpu = pmc_ncpu()) < 0)
err(EX_OSERR, "Unable to determine the number of cpus");
- /* determine the maximum number of PMCs in any CPU */
+ /* Determine the set of active CPUs. */
+ cpumask = (1 << ncpu) - 1;
+ dummy = sizeof(int);
+ haltedcpus = (cpumask_t) 0;
+ if (ncpu > 1 && sysctlbyname("machdep.hlt_cpus", &haltedcpus,
+ &dummy, NULL, 0) < 0)
+ err(EX_OSERR, "ERROR: Cannot determine which CPUs are "
+ "halted");
+ cpumask &= ~haltedcpus;
+
+ /* Determine the maximum number of PMCs in any CPU. */
npmc = 0;
for (c = 0; c < ncpu; c++) {
if ((t = pmc_npmc(c)) < 0)
- err(EX_OSERR, "Unable to determine the number of PMCs in "
- "CPU %d", c);
+ err(EX_OSERR, "Unable to determine the number of "
+ "PMCs in CPU %d", c);
npmc = t > npmc ? t : npmc;
}
@@ -187,8 +199,10 @@ pmcc_do_enable_disable(struct pmcc_op_li
#define MAP(M,C,P) (*((M) + (C)*npmc + (P)))
if (cpu == PMCC_CPU_ALL)
- for (i = 0; i < ncpu; i++)
- SET_PMCS(i, pmc, op);
+ for (i = 0; i < ncpu; i++) {
+ if ((1 << i) & cpumask)
+ SET_PMCS(i, pmc, op);
+ }
else
SET_PMCS(cpu, pmc, op);
}
More information about the svn-src-all
mailing list