[PATCH 4/4] drm/etnaviv: export client GPU usage statistics via fdinfo
Christian König
christian.koenig at amd.com
Tue Jul 2 07:21:40 UTC 2024
Am 01.07.24 um 19:14 schrieb Lucas Stach:
> This exposes a accumulated GPU active time per client via the
> fdinfo infrastructure.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
Acked-by: Christian König <christian.koenig at amd.com>
Sorry that I couldn't find time to finalize and upstream that patch set
myself.
Regards,
Christian.
> ---
> v2:
> - new patch
> ---
> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 32 ++++++++++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 6500f3999c5f..f42b982f9a16 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -24,6 +24,7 @@
> #include "etnaviv_gem.h"
> #include "etnaviv_mmu.h"
> #include "etnaviv_perfmon.h"
> +#include "common.xml.h"
>
> /*
> * DRM operations:
> @@ -488,7 +489,36 @@ static const struct drm_ioctl_desc etnaviv_ioctls[] = {
> ETNA_IOCTL(PM_QUERY_SIG, pm_query_sig, DRM_RENDER_ALLOW),
> };
>
> -DEFINE_DRM_GEM_FOPS(fops);
> +static void etnaviv_fop_show_fdinfo(struct seq_file *m, struct file *f)
> +{
> + struct drm_file *file = f->private_data;
> + struct drm_device *dev = file->minor->dev;
> + struct etnaviv_drm_private *priv = dev->dev_private;
> + struct etnaviv_file_private *ctx = file->driver_priv;
> +
> + /*
> + * For a description of the text output format used here, see
> + * Documentation/gpu/drm-usage-stats.rst.
> + */
> + seq_printf(m, "drm-driver:\t%s\n", dev->driver->name);
> + seq_printf(m, "drm-client-id:\t%u\n", ctx->id);
> +
> + for (int i = 0; i < ETNA_MAX_PIPES; i++) {
> + struct etnaviv_gpu *gpu = priv->gpu[i];
> +
> + if (!gpu)
> + continue;
> +
> + seq_printf(m, "drm-engine-pipe%d:\t%llu ns\n", i,
> + drm_sched_entity_time_spent(&ctx->sched_entity[i]));
> + }
> +}
> +
> +static const struct file_operations fops = {
> + .owner = THIS_MODULE,
> + DRM_GEM_FOPS,
> + .show_fdinfo = etnaviv_fop_show_fdinfo,
> +};
>
> static const struct drm_driver etnaviv_drm_driver = {
> .driver_features = DRIVER_GEM | DRIVER_RENDER,
More information about the amd-gfx
mailing list