+ sfree(log);
+}
+
+static inline unsigned long hist_sum(int j, int stride, unsigned int *io_u_plat)
+{
+ unsigned long sum;
+ int k;
+
+ for (k = sum = 0; k < stride; k++)
+ sum += io_u_plat[j + k];
+
+ return sum;
+}
+
+static void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,
+ uint64_t sample_size)
+{
+ struct io_sample *s;
+ int log_offset;
+ uint64_t i, j, nr_samples;
+ unsigned int *io_u_plat;
+
+ int stride = 1 << hist_coarseness;
+
+ if (!sample_size)
+ return;
+
+ s = __get_sample(samples, 0, 0);
+ log_offset = (s->__ddir & LOG_OFFSET_SAMPLE_BIT) != 0;
+
+ nr_samples = sample_size / __log_entry_sz(log_offset);
+
+ for (i = 0; i < nr_samples; i++) {
+ s = __get_sample(samples, log_offset, i);
+ io_u_plat = (unsigned int *) (uintptr_t) s->val;
+ fprintf(f, "%lu, %u, %u, ", (unsigned long)s->time,
+ io_sample_ddir(s), s->bs);
+ for (j = 0; j < FIO_IO_U_PLAT_NR - stride; j += stride) {
+ fprintf(f, "%lu, ", hist_sum(j, stride, io_u_plat));
+ }
+ fprintf(f, "%lu\n", (unsigned long)
+ hist_sum(FIO_IO_U_PLAT_NR - stride, stride, io_u_plat));
+ free(io_u_plat);
+ }