Hi Tvrtko, On 2023-10-12 at 09:15:45 +0100, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Wrap all operations on clients via the Intel specific wrappers in order to > simplify upcoming work. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Reviewed-by: Kamil Konieczny <kamil.konieczny@xxxxxxxxxxxxxxx> > --- > tools/intel_gpu_top.c | 42 ++++++++++++++++++++++-------------------- > 1 file changed, 22 insertions(+), 20 deletions(-) > > diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c > index 091fe28068dc..b2e81d5f9ffb 100644 > --- a/tools/intel_gpu_top.c > +++ b/tools/intel_gpu_top.c > @@ -132,6 +132,7 @@ struct engines { > struct intel_clients { > const char *pci_slot; > struct igt_drm_client_engines classes; > + struct igt_drm_clients *clients; > }; > > static struct termios termios_orig; > @@ -2436,19 +2437,22 @@ intel_init_clients(struct intel_clients *iclients, > iclients->classes.capacity[i] = engines->class[i].num_engines; > iclients->classes.names[i] = strdup(engines->class[i].name); > } > + > + iclients->clients = igt_drm_clients_init(iclients); > } > > static void intel_free_clients(struct intel_clients *iclients) > { > + if (iclients->clients) > + igt_drm_clients_free(iclients->clients); > + > free((void *)iclients->pci_slot); > free(iclients->classes.capacity); > free(iclients->classes.names); > } > > -int main(int argc, char **argv) > +static void intel_scan_clients(struct intel_clients *iclients) > { > - unsigned int period_us = DEFAULT_PERIOD_MS * 1000; > - struct igt_drm_clients *clients = NULL; > static const char *engine_map[] = { > "render", > "copy", > @@ -2456,6 +2460,15 @@ int main(int argc, char **argv) > "video-enhance", > "compute", > }; > + > + igt_drm_clients_scan(iclients->clients, client_match, > + engine_map, ARRAY_SIZE(engine_map), > + NULL, 0); > +} > + > +int main(int argc, char **argv) > +{ > + unsigned int period_us = DEFAULT_PERIOD_MS * 1000; > bool physical_engines = false; > struct intel_clients iclients; > int con_w = -1, con_h = -1; > @@ -2613,15 +2626,11 @@ int main(int argc, char **argv) > > init_engine_classes(engines); > > - if (has_drm_fdinfo(&card)) { > + if (has_drm_fdinfo(&card)) > intel_init_clients(&iclients, &card, engines); > - clients = igt_drm_clients_init(&iclients); > - } > > pmu_sample(engines); > - igt_drm_clients_scan(clients, client_match, > - engine_map, ARRAY_SIZE(engine_map), > - NULL, 0); > + intel_scan_clients(&iclients); > gettime(&ts); > > if (output_mode == JSON) > @@ -2652,12 +2661,8 @@ int main(int argc, char **argv) > pmu_sample(engines); > t = (double)(engines->ts.cur - engines->ts.prev) / 1e9; > > - disp_clients = > - display_clients(igt_drm_clients_scan(clients, > - client_match, > - engine_map, > - ARRAY_SIZE(engine_map), > - NULL, 0)); > + intel_scan_clients(&iclients); > + disp_clients = display_clients(iclients.clients); > scan_us = elapsed_us(&ts, period_us); > > if (stop_top) > @@ -2708,7 +2713,7 @@ int main(int argc, char **argv) > pops->close_struct(); > } > > - if (disp_clients != clients) > + if (disp_clients != iclients.clients) > free_display_clients(disp_clients); > > if (stop_top) > @@ -2723,10 +2728,7 @@ int main(int argc, char **argv) > if (output_mode == JSON) > printf("]\n"); > > - if (clients) { > - igt_drm_clients_free(clients); > - intel_free_clients(&iclients); > - } > + intel_free_clients(&iclients); > > free(codename); > err_pmu: > -- > 2.39.2 >