Change network transmitted doubles to fio_fp64_t IEEE 754 type
Encode and decode when transferring over the network.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/client.c b/client.c
index 97bfc89..d538e8a 100644
--- a/client.c
+++ b/client.c
@@ -330,9 +330,12 @@
dst->max_val = le64_to_cpu(src->max_val);
dst->min_val = le64_to_cpu(src->min_val);
dst->samples = le64_to_cpu(src->samples);
- /* FIXME */
- dst->mean = __le64_to_cpu(src->mean);
- dst->S = __le64_to_cpu(src->S);
+
+ /*
+ * Floats arrive as IEEE 754 encoded uint64_t, convert back to double
+ */
+ dst->mean.u.f = fio_uint64_to_double(le64_to_cpu(dst->mean.u.i));
+ dst->S.u.f = fio_uint64_to_double(le64_to_cpu(dst->S.u.i));
}
static void convert_ts(struct thread_stat *dst, struct thread_stat *src)
@@ -357,7 +360,13 @@
dst->minf = le64_to_cpu(src->minf);
dst->majf = le64_to_cpu(src->majf);
dst->clat_percentiles = le64_to_cpu(src->clat_percentiles);
- dst->percentile_list = NULL;
+
+ for (i = 0; i < FIO_IO_U_LIST_MAX_LEN; i++) {
+ fio_fp64_t *fps = &src->percentile_list[i];
+ fio_fp64_t *fpd = &dst->percentile_list[i];
+
+ fpd->u.f = fio_uint64_to_double(le64_to_cpu(fps->u.i));
+ }
for (i = 0; i < FIO_IO_U_MAP_NR; i++) {
dst->io_u_map[i] = le32_to_cpu(src->io_u_map[i]);