[RFC PATCH v2 17/17] WIP: drm/tegra: Implement new UAPI (submit_handle_syncpts)
Dmitry Osipenko
digetx at gmail.com
Wed Sep 9 01:13:23 UTC 2020
05.09.2020 13:34, Mikko Perttunen пишет:
> +int tegra_drm_ioctl_channel_submit(struct drm_device *drm, void *data,
> + struct drm_file *file)
> +{
> + struct tegra_drm_file *fpriv = file->driver_priv;
> + struct drm_tegra_channel_submit *args = data;
> + struct drm_tegra_submit_syncpt_incr incr;
> + struct tegra_drm_job_data *job_data;
> + struct ww_acquire_ctx acquire_ctx;
> + struct tegra_drm_channel_ctx *ctx;
> + struct host1x_job *job;
> + struct gather_bo *bo;
> + u32 i;
> + int err;
> +
> + if (args->reserved[0] || args->reserved[1] || args->reserved[2] ||
> + args->reserved[3])
> + return -EINVAL;
> +
> + ctx = tegra_drm_channel_ctx_lock(fpriv, args->channel_ctx);
> + if (!ctx)
> + return -EINVAL;
> +
> + err = submit_copy_gather_data(drm, &bo, args);
> + if (err)
> + goto unlock;
> +
> + job_data = kzalloc(sizeof(*job_data), GFP_KERNEL);
> + if (!job_data) {
> + err = -ENOMEM;
> + goto put_bo;
> + }
> +
> + err = submit_process_bufs(drm, bo, job_data, ctx, args, &acquire_ctx);
> + if (err)
> + goto free_job_data;
> +
> + err = submit_create_job(drm, &job, bo, ctx, args, file);
> + if (err)
> + goto free_job_data;
> +
> + err = submit_handle_syncpts(drm, job, &incr, args);
> + if (err)
> + goto put_job;
How many sync points would use an average job? Maybe it should be better
to have the predefined array of sync points within the struct
drm_tegra_channel_submit?
More information about the dri-devel
mailing list