* Markus Armbruster (arm...@redhat.com) wrote: > qsp_report() takes an fprintf()-like callback and a FILE * to pass to > it. > > Its only caller hmp_sync_profile() passes monitor_fprintf() and the > current monitor cast to FILE *. monitor_fprintf() casts it right > back, and is otherwise identical to monitor_printf(). The > type-punning is ugly. > > Drop the callback, and call qemu_printf() instead. > > Signed-off-by: Markus Armbruster <arm...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > include/block/qapi.h | 1 + > include/qemu/qsp.h | 6 ++---- > monitor.c | 2 +- > util/qsp.c | 21 +++++++++++---------- > 4 files changed, 15 insertions(+), 15 deletions(-) > > diff --git a/include/block/qapi.h b/include/block/qapi.h > index 83bdb098bd..a891f43b9c 100644 > --- a/include/block/qapi.h > +++ b/include/block/qapi.h > @@ -27,6 +27,7 @@ > > #include "block/block.h" > #include "block/snapshot.h" > +#include "qemu/fprintf-fn.h" > > BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, > BlockDriverState *bs, Error **errp); > diff --git a/include/qemu/qsp.h b/include/qemu/qsp.h > index a94c464f90..bf36aabfa8 100644 > --- a/include/qemu/qsp.h > +++ b/include/qemu/qsp.h > @@ -11,15 +11,13 @@ > #ifndef QEMU_QSP_H > #define QEMU_QSP_H > > -#include "qemu/fprintf-fn.h" > - > enum QSPSortBy { > QSP_SORT_BY_TOTAL_WAIT_TIME, > QSP_SORT_BY_AVG_WAIT_TIME, > }; > > -void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, > - enum QSPSortBy sort_by, bool callsite_coalesce); > +void qsp_report(size_t max, enum QSPSortBy sort_by, > + bool callsite_coalesce); > > bool qsp_is_enabled(void); > void qsp_enable(void); > diff --git a/monitor.c b/monitor.c > index 7573689585..1650ceec3a 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -1336,7 +1336,7 @@ static void hmp_info_sync_profile(Monitor *mon, const > QDict *qdict) > enum QSPSortBy sort_by; > > sort_by = mean ? QSP_SORT_BY_AVG_WAIT_TIME : QSP_SORT_BY_TOTAL_WAIT_TIME; > - qsp_report((FILE *)mon, monitor_fprintf, max, sort_by, coalesce); > + qsp_report(max, sort_by, coalesce); > } > > static void hmp_info_history(Monitor *mon, const QDict *qdict) > diff --git a/util/qsp.c b/util/qsp.c > index 410f1ba004..5264c97342 100644 > --- a/util/qsp.c > +++ b/util/qsp.c > @@ -56,7 +56,9 @@ > * Critical-Section Execution to Improve the Performance of Multithreaded > * Applications", USENIX ATC'12. > */ > + > #include "qemu/osdep.h" > +#include "qemu/qemu-print.h" > #include "qemu/thread.h" > #include "qemu/timer.h" > #include "qemu/qht.h" > @@ -678,8 +680,7 @@ static gboolean qsp_tree_report(gpointer key, gpointer > value, gpointer udata) > return FALSE; > } > > -static void > -pr_report(const QSPReport *rep, FILE *f, fprintf_function pr) > +static void pr_report(const QSPReport *rep) > { > char *dashes; > size_t max_len = 0; > @@ -702,15 +703,15 @@ pr_report(const QSPReport *rep, FILE *f, > fprintf_function pr) > /* white space to leave to the right of "Call site" */ > callsite_rspace = callsite_len - strlen("Call site"); > > - pr(f, "Type Object Call site%*s Wait Time (s) " > - " Count Average (us)\n", callsite_rspace, ""); > + qemu_printf("Type Object Call site%*s Wait Time (s) " > + " Count Average (us)\n", callsite_rspace, ""); > > /* build a horizontal rule with dashes */ > n_dashes = 79 + callsite_rspace; > dashes = g_malloc(n_dashes + 1); > memset(dashes, '-', n_dashes); > dashes[n_dashes] = '\0'; > - pr(f, "%s\n", dashes); > + qemu_printf("%s\n", dashes); > > for (i = 0; i < rep->n_entries; i++) { > const QSPReportEntry *e = &rep->entries[i]; > @@ -726,11 +727,11 @@ pr_report(const QSPReport *rep, FILE *f, > fprintf_function pr) > e->callsite_at, > callsite_len - (int)strlen(e->callsite_at), > "", > e->time_s, e->n_acqs, e->ns_avg * 1e-3); > - pr(f, "%s", s->str); > + qemu_printf("%s", s->str); > g_string_free(s, TRUE); > } > > - pr(f, "%s\n", dashes); > + qemu_printf("%s\n", dashes); > g_free(dashes); > } > > @@ -746,8 +747,8 @@ static void report_destroy(QSPReport *rep) > g_free(rep->entries); > } > > -void qsp_report(FILE *f, fprintf_function cpu_fprintf, size_t max, > - enum QSPSortBy sort_by, bool callsite_coalesce) > +void qsp_report(size_t max, enum QSPSortBy sort_by, > + bool callsite_coalesce) > { > GTree *tree = g_tree_new_full(qsp_tree_cmp, &sort_by, g_free, NULL); > QSPReport rep; > @@ -762,7 +763,7 @@ void qsp_report(FILE *f, fprintf_function cpu_fprintf, > size_t max, > g_tree_foreach(tree, qsp_tree_report, &rep); > g_tree_destroy(tree); > > - pr_report(&rep, f, cpu_fprintf); > + pr_report(&rep); > report_destroy(&rep); > } > > -- > 2.17.2 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK