aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c')
-rw-r--r--cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c
index 5ea55a05faf0..e5d10ad5ac0a 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c
@@ -35,6 +35,7 @@
#include <unistd.h>
#include <dt_impl.h>
#include <assert.h>
+#include <dt_oformat.h>
#ifdef illumos
#include <alloca.h>
#else
@@ -471,8 +472,17 @@ dt_aggregate_snap_cpu(dtrace_hdl_t *dtp, processorid_t cpu)
}
if (buf->dtbd_drops != 0) {
- if (dt_handle_cpudrop(dtp, cpu,
- DTRACEDROP_AGGREGATION, buf->dtbd_drops) == -1)
+ int error;
+
+ if (dtp->dt_oformat) {
+ xo_open_instance("probes");
+ dt_oformat_drop(dtp, cpu);
+ }
+ error = dt_handle_cpudrop(dtp, cpu, DTRACEDROP_AGGREGATION,
+ buf->dtbd_drops);
+ if (dtp->dt_oformat)
+ xo_close_instance("probes");
+ if (error != 0)
return (-1);
}
@@ -1086,8 +1096,10 @@ dt_aggregate_go(dtrace_hdl_t *dtp)
assert(agp->dtat_ncpu == 0);
assert(agp->dtat_cpus == NULL);
- agp->dtat_maxcpu = dt_sysconf(dtp, _SC_CPUID_MAX) + 1;
- agp->dtat_ncpu = dt_sysconf(dtp, _SC_NPROCESSORS_MAX);
+ agp->dtat_maxcpu = dt_cpu_maxid(dtp) + 1;
+ if (agp->dtat_maxcpu <= 0)
+ return (-1);
+ agp->dtat_ncpu = dt_sysconf(dtp, _SC_NPROCESSORS_CONF);
agp->dtat_cpus = malloc(agp->dtat_ncpu * sizeof (processorid_t));
if (agp->dtat_cpus == NULL)
@@ -2127,8 +2139,13 @@ dtrace_aggregate_print(dtrace_hdl_t *dtp, FILE *fp,
if (func == NULL)
func = dtrace_aggregate_walk_sorted;
- if ((*func)(dtp, dt_print_agg, &pd) == -1)
- return (dt_set_errno(dtp, dtp->dt_errno));
+ if (dtp->dt_oformat) {
+ if ((*func)(dtp, dt_format_agg, &pd) == -1)
+ return (dt_set_errno(dtp, dtp->dt_errno));
+ } else {
+ if ((*func)(dtp, dt_print_agg, &pd) == -1)
+ return (dt_set_errno(dtp, dtp->dt_errno));
+ }
return (0);
}