[DTrace-devel] [PATCH 42/61] Fix dtrace_aggregate_clear() for min() and max()
eugene.loh at oracle.com
eugene.loh at oracle.com
Fri Jul 8 14:45:26 UTC 2022
From: Eugene Loh <eugene.loh at oracle.com>
NB: This function is apparently unused in both legacy DTrace as well
as the port to BPF, but we will be able to make use of it in up-coming
patches.
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_aggregate.c | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/libdtrace/dt_aggregate.c b/libdtrace/dt_aggregate.c
index f2501ad4..84b79207 100644
--- a/libdtrace/dt_aggregate.c
+++ b/libdtrace/dt_aggregate.c
@@ -1800,13 +1800,27 @@ dtrace_aggregate_clear(dtrace_hdl_t *dtp)
rec = &aggdesc->dtagd_recs[aggdesc->dtagd_nrecs - 1];
data = &h->dtahe_data;
- memset(&data->dtada_data[rec->dtrd_offset], 0, rec->dtrd_size);
-
- if (data->dtada_percpu == NULL)
- continue;
+ switch (rec->dtrd_action) {
+ case DT_AGG_MIN:
+ *((uint64_t*)(&data->dtada_data[rec->dtrd_offset])) = INT64_MAX;
+ if (data->dtada_percpu)
+ for (i = 0; i < max_cpus; i++)
+ *((uint64_t*)data->dtada_percpu[i]) = INT64_MAX;
+ break;
+ case DT_AGG_MAX:
+ *((uint64_t*)(&data->dtada_data[rec->dtrd_offset])) = INT64_MIN;
+ if (data->dtada_percpu)
+ for (i = 0; i < max_cpus; i++)
+ *((uint64_t*)data->dtada_percpu[i]) = INT64_MIN;
+ break;
+ default:
+ memset(&data->dtada_data[rec->dtrd_offset], 0, rec->dtrd_size);
+ if (data->dtada_percpu)
+ for (i = 0; i < max_cpus; i++)
+ memset(data->dtada_percpu[i], 0, rec->dtrd_size);
+ break;
+ }
- for (i = 0; i < max_cpus; i++)
- memset(data->dtada_percpu[i], 0, rec->dtrd_size);
}
}
--
2.18.4
More information about the DTrace-devel
mailing list