Quoting Jordan Crouse (2018-04-05 23:00:50) > diff --git a/drivers/gpu/drm/msm/msm_debugfs.c > b/drivers/gpu/drm/msm/msm_debugfs.c > index ba74cb4f94df..fd535dab3d5b 100644 > --- a/drivers/gpu/drm/msm/msm_debugfs.c > +++ b/drivers/gpu/drm/msm/msm_debugfs.c > @@ -25,13 +25,22 @@ static int msm_gpu_show(struct drm_device *dev, struct > seq_file *m) > { > struct msm_drm_private *priv = dev->dev_private; > struct msm_gpu *gpu = priv->gpu; > + struct msm_gpu_state *state; > > - if (gpu) { > - seq_printf(m, "%s Status:\n", gpu->name); > - pm_runtime_get_sync(&gpu->pdev->dev); > - gpu->funcs->show(gpu, m); > - pm_runtime_put_sync(&gpu->pdev->dev); > - } > + if (!gpu) > + return 0; > + > + pm_runtime_get_sync(&gpu->pdev->dev); > + state = gpu->funcs->gpu_state_get(gpu); > + pm_runtime_put_sync(&gpu->pdev->dev); > + > + if (IS_ERR(state)) > + return PTR_ERR(state); > + > + seq_printf(m, "%s Status:\n", gpu->name); > + gpu->funcs->show(gpu, state, m); > + > + gpu->funcs->gpu_state_put(state);
Ah. This be trickier than it appears thanks to how seq_file tries to keep the interface simple :) For a large buffer, seq_file will call the show multiple times to convert it into a single string, which it then iterates over. (iirc) Ideally, you grab the error state on open, and then use the drm_printer_iterator you have to feed the chunks to seqfs. At a minimum, I do recommend you stick the get into the seq_open callback, as my memory says the show will be called multiple times. -Chris _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel